WebObjects/Web 應用程式/開發/框架
框架是 Apple 用於打包和分發共享功能的機制。框架不僅可以包含程式碼,還可以包含資源和 Web 伺服器資源,就像一個完整的 WOA。
部署在框架中的影像
如果框架包含從主應用程式訪問的影像,則必須記住更改某些 WOComponents 中的框架繫結。如果不這樣做,則在開發過程中會變得很明顯。預設值為“app”,但必須將其更改為框架的名稱。在部署時,必須在部署機器上包含應用程式框架。如果只將框架放在此位置,影像似乎無法正確顯示:/Library/Frameworks。您還需要將框架的 Web 伺服器資源放在 /WebServer/Documents/WebObjects/Frameworks 資料夾中。我只是將整個 .framework 資料夾包含在該目錄中,影像就會從 Web 伺服器正確提供。所有上述路徑均適用於 MacOS X。
我有一個框架,我想對其進行一些顯式初始化。類似於在 Java 中執行類靜態初始化器。在何處放置此程式碼?或者我可以使用類靜態初始化器嗎?
在框架的資源中新增一個名為 CustomInfo.plist 的文字檔案。將此文字新增到檔案中
{
NSPrincipalClass = MyFrameworkInitializer;
}
建立一個 java 檔案 MyFrameworkInitializer.java,並在該類的靜態塊中初始化框架中的任何類。當然,您可以將類命名為任何名稱,只需確保在 .plist 檔案中放入了完整的類名,包括包。
這是 NeXT 時代的遺留問題,如果框架永遠消失,而 WO 切換到普通的 Java 部署,它可能會停止工作。基本上,框架載入器將以這種方式引用宣告為 NSPrincipalClass? 的每個類。巧妙的是,您的框架在初始化時無需在應用程式建構函式中自己記住它。
我無法按照上述說明進行操作。問題
- 生成的 Info.plist 不包含該 NSPrincipalClass? 引用,並且顯然什麼也沒發生。如果按照說明進行操作,您實際上最終會得到一個 CustomInfo.plist。我原本期望 CustomInfo.plist 合併到 Info.plist 中。我發現,如果您確實希望它合併到 Info.plist 中,則需要“專案 - 編輯活動目標”,然後在 Info.plist 摺疊處有一個名為“Cocoa 特定”的條目。在那裡,您找到“主類”的條目,然後在其中輸入初始化器類。
- 初始化器類呼叫_非常_早。我預計它會像資料庫連線一樣工作;即在應用程式初始化之後。實際上,在我的情況下,框架是在 main 之後立即初始化的。如果您打開了執行日誌,則初始化將在列印類路徑列表後列印第一個
時發生。因此,我相信它沒有發生,因為我在後來尋找初始化。
希望下一位勇敢的開發者能夠得到幫助。順便說一下,Xcode 的相關文件對於 WO 開發者來說只有邊際作用。當您進行 WO 框架時,描述的面板實際上並不存在。但是,以必要條目形式描述的資訊很有幫助。
提示:我經常讓我的框架初始化器建立一個工作器物件來監聽 ApplicationWillLaunchNotification 或 ApplicationDidLaunchNotification。如果我需要在 WOApplication 例項構建之前或之後進行初始化。