簡體   English   中英

iOS:通過 Xcode Target 構建資源包

[英]iOS: Build a Resource Bundle via Xcode Target

我想通過 xcode 目標從我的靜態庫的資源文件創建一個資源包。 我看到 Three20 有一個需要導入的 .bundle 文件。

我怎樣才能做到這一點?

重要免責聲明:

Apple 不認可此解決方案。 當我與一位在 Xcode 上工作的 Apple 開發人員交談時,他們告訴我 iOS不支持資源包,他們很驚訝這竟然有效。

這個解決方案在 iOS 9 到 13 上對我有用,包括手機和平板電腦。 但是,未來對 iOS 的更新可能會破壞這一點。 請注意這一點。

現在來回答:

我知道已經晚了 8 年,但是由於我偶然發現了這個問題,因此其他人很有可能會這樣做,所以我想我會提供一個有用的答案。

步驟 1. 創建一個新目標

在此處輸入圖片說明

  • 確保您在項目導航器中選擇了您的項目
  • 單擊目標列表底部的+

第 2 步。創建一個 macOS 包

在此處輸入圖片說明

我們將在步驟 3 中將其轉換為 iOS Bundle

第 2 步(續)。 創建 macOS 捆綁包

在此處輸入圖片說明

  • 為您的捆綁包命名
  • 點擊“完成”

步驟 3. 將 Base SDK 從 macOS 更改為 iOS

在此處輸入圖片說明

  • 確保您選擇了新的資源包目標
  • 轉到構建設置
  • 查找Base SDK並將此值從macOS更改為iOS

在這一點上,您在技術上已經完成了您的問題(為 iOS 創建了一個資源包目標),但是需要一些配置才能使其正常工作

步驟 4. 替換 iOS 捆綁資源

在此處輸入圖片說明

  • 確保您選擇了應用程序目標(而不是資源包)
  • 轉到構建階段
  • 選擇所有資源
  • -按鈕刪除它們

第 4 步(續)。 替換 iOS 捆綁資源

在此處輸入圖片說明

  • +按鈕向 iOS 應用程序添加新的捆綁資源(未圖示)
  • 選擇您的捆綁產品
  • 點擊“添加”

步驟 5. 設置依賴項

在此處輸入圖片說明

  • 打開Dependencies部分(仍在 Build Phases 下並且仍在您的應用程序中,而不是資源包中)
  • 單擊+按鈕添加新的依賴項

第 5 步(續)。 設置依賴

在此處輸入圖片說明

  • 選擇資源包項目
  • 點擊“添加”

現在你完成了!

完成所有這些步驟后,您將構建一個與 iOS 兼容的資源包並將其嵌入到要加載的應用程序中。 這不是那么簡單,很多文章可能會說這是不受支持的,但我已經在已發布的應用程序中使用了此功能,並且效果很好

請記住,如果您現在想向您的應用程序添加任何資源(PNG、XIB 文件等),您需要將它們添加到而不是應用程序,如下所示:

在此處輸入圖片說明

重要問題

設置完成后,再檢查一次資源包的構建設置。 查找標題為“版本控制系統”的設置。 此值必須設置為None 如果將其設置為Apple Generic在嘗試推送到應用商店時遇到問題!

Apple 的版本控制系統將創建一個*_vers.c文件,編譯它,然后將此二進制文件嵌入到您的包中。 由於這不是有效的 CFBundleExecutable,它會導致您的應用程序被拒絕並出現錯誤 ITMS-90171

在此處輸入圖片說明

捆綁包只是一個具有特殊結構和 .bundle 擴展名的目錄。 您可以在文檔中閱讀更多關於細節的信息

編輯:

重要的是,bundle 只是一個帶有特殊擴展名的普通文件夾。 例如,如果你有一個名為 MyBundle.bundle 的文件夾和一個名為 image.png 的圖像,你可以用[UIImage imageNamed:@"MyBundle.bundle/image.png"];加載它[UIImage imageNamed:@"MyBundle.bundle/image.png"]; 因此,無需通過 Xcode 目標構建它。 實際上,它不適用於 iOS 項目。 您可以在項目或 shell 腳本中使用 Copy Files 構建階段。

這很簡單,也很強大。 例如,如果您符合框架文檔中列出的特殊結構,您可以使用簡單的方法、shell 腳本或 ant 任務或 rake 文件將靜態庫構建到框架中。 只要輸出目錄符合結構並且命名為Something.framework,你就可以將其作為Framework使用,即使在iOS上也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM