[英]Cannot generate iOS App archive in xcode
我在從應用程序生成 iOS 應用程序存檔時遇到問題。 該應用程序編譯得很好,甚至可以在模擬器中運行。 現在我想做一些臨時測試並且無法生成 iOS 應用程序存檔。 當我單擊 Product -> Archive 時,它會生成一個通用的 xcode 存檔。 誰能幫我。 我應該提一下,我已經生成了這個應用程序的 iOS 應用程序存檔。 由於某種原因,它剛剛停止生成 iOS 存檔。 非常感謝。
檢查構建設置:
如果您添加了框架/庫,就會發生這種情況……您需要編輯該庫的目標-> 構建設置並將“跳過安裝”設置設置為“是”。 當您重新存檔時,XCode 應該再次開始生成“iOS 應用存檔”而不是“通用 xcode 存檔”。
除了Skip Install to Yes 之外,如果您在應用程序項目中打開了另一個 lib/framework 項目,您必須在Build Phase / Copy Headers中將標題(如果有)從public 移動到項目。
我做了以下工作以使其對我有用:
Absolute path
更改為products directory
。 注意:請參閱下面的提示以縮小搜索范圍以查找導致此錯誤的庫。就是這樣!
提示:要了解導致存檔創建存檔文件而不是 ipa 的違規文件,請執行以下操作:
usr/local/include
將識別您需要從 Public 移動到 Project 的罪魁禍首頭文件,或者您必須從絕對路徑更改為 products 目錄的文件(甚至是您忘記將跳過安裝設置為 yes 的文件)旗幟)。 但該目錄(即 usr/local/include)因您的子庫目錄結構而異。 在許多情況下.. 您將看到此處列出的上述步驟 3 中的復制文件下列出的所有文件。 如果您在這里找到它們,那么您對問題的原因就有了明確的答案。更新提示:讓生活更簡單.. 上面提示中第 4 步下出現的任何文件.. 只需在 xcode 的全局搜索中搜索它.. 你應該立即得到你想要的結果.. 例如,這是我的文件夾的內容(按照上面提示中的步驟):
所以我可以說它與crypto和ssl庫有關..搜索它們:
讓我意識到我忘記將跳過安裝設置為是。
如果導出存檔,打開它,看看/urs/local/include
在產品嘗試這個建議:
在每個 pod 中,在
Packaging
下,Private Headers Folder Path
和Public Headers Folder Path
設置為/usr/local/include
。 如果我清除它們,那么我會得到一個有效的存檔。
在將我的 React Native 應用程序升級到0.11.0
、Xcode 7
和 CocoaPods 0.39.0.beta.4
后為我工作。
如果您使用 CocoaPods 以及 WatchKit 或 Today Extension,則 CocoaPods 存儲庫上有一個未解決的問題,解釋了您的問題可能是什么。
我的解決方案是從Build Phases
下的 WatchKit Extension 和 Today Extension 目標中刪除Copy Pod Resources
Build Phases
。 完成此操作后,該項目按預期編譯和存檔。
希望這對某人有幫助,這讓我難倒了一整天!
如果上述任何答案都不起作用,則您的問題可能與cocoaPods
。 最新的0.38.1
更新對我來說把事情搞砸了,但后來我降級到0.37.1
,一切又恢復了正常。 使用Xcode 6.3.1
稍后編輯:更新到0.38.2
也會解決這個問題。 有關導致此問題的原因的更多信息: Cocoapods 0.38.1 failed to create valid Archive
盡管我使用的是 Xcode5 並且對我進行排序的是編輯構建方案 - 嘗試上述所有適用的建議對我的情況沒有幫助。
我有兩個目標,比如“App”和“App FREE”。 我在嘗試存檔免費版本時發生了通用存檔的問題,這是我在應用程序的“正常”版本之后添加的。 就我而言,當我在工具欄中選擇它的 Scheme 並選擇 Edit Scheme 時......我看到 Build 部分有兩個目標,即 App 和 App FREE。
我取消選中 App 的所有列,只選中 App FREE 的列,然后單擊“確定”。 下次我選擇產品 > 存檔時,我的應用程序是免費的,而不是通用存檔。 :)
如果您只有一個項目,也許這個解決方案會很有用。 當我復制目標時發生了這個問題。 結果我並行構建了兩個目標。 這導致了這個問題。 通用 IOS 存檔已構建。
要關閉並行構建,請轉到
更新到 iOS 9 和 Xcode 7 后我遇到了這個問題。Josh H 的解決方案對我有用:
在每個 pod 中,在 Packaging 下,Private Headers Folder Path 和 Public Headers Folder Path 設置為 /usr/local/include。 如果我清除它們,那么我會得到一個有效的存檔。
我還為我的 Podfile 制作了一個安裝后腳本來自動執行此操作!
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
end
end
end
只需將它添加到 Podfile 的底部並運行pod install
我有這個問題。 就我而言,這是由於將 Mac 應用程序目標保留為 iOS 應用程序的依賴項所致。
像這樣設置的原因是 Mac 應用程序是一個工具,用於為 iOS 應用程序生成一些數據,然后將這些數據包含在捆綁包中。
在構建 iOS 應用程序本身之前,我必須刪除該依賴項並單獨構建該工具。
在我的場景中,只有在我開始將 Swift 代碼包含在我主要的 Objective-C 項目中之后,我才會得到錯誤的“通用存檔”。 在對 Xcode 吐出的存檔文件進行了大量故障排除和檢查后,我注意到SwiftSupport
文件夾(包含 Swift 運行時所需的 dylib)在我的存檔中與一個全新的 Swift 項目應用程序位於不同的位置檔案。
我找到了Installation Directory
構建設置,並注意到它在我的項目中設置為自定義路徑。 我只是刪除了它(將它設置為它的通用值/Applications
)和下一個 Build -> Archive 我確實按預期工作並給了我一個合適的 iOS App Archive。
TL; DR:在您的應用程序中包含 Swift 代碼時,請確保您的Installation Directory
構建設置設置為其默認值/Applications
,尤其是當您從可能具有一些意外的遺留構建設置的舊項目文件開始時。
我的工作區中有多個項目(GTL、Pods 和我的主項目),這對我有用:
選擇 Project ,那里會有 2 種類型,有Project和Targets 。
對於GTL
或PODS
等不是您主要項目的項目:
項目:
Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
目標:
Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
對於主項目(通常與您的產品名稱相同):
項目:
Skip Install = NO
Installation Directory = /Applications
目標:
Skip Install = NO
Installation Directory = /Applications
檢查每個項目和目標上的 ios 部署目標以確保它們都相同。
離開這里是為了從同一旅程中拯救其他人。
我發現我也需要從工作區中的靜態庫目標中刪除相同的 Copy Pod Resources 構建階段。
除了 Alex L 的回答。
Point 3. 將“Build Settings”->“Public Header Folder Path”更改為“include/xxx”也有效。
如果以上都沒有幫助你......經過很多時間......
我刪除了 Info.plist 中 Bundle Version 的值,因為我對 Bundle Version Short 1.0 已經足夠滿意了。 壞的。 不要這樣做。
*注意我實際上是通過在右側的 UI 中編輯它來做到這一點的,但沒有意識到它會在 Info.plist 文件中放置一個空鍵。 我認為這使它無效。 我的捆綁包在存檔時顯示為其他項目並且沒有圖標,我無法上傳到任何地方。
這歸結為 Info.plist 中的無效值。 如果它不是有效的存檔,請嘗試解壓縮舊存檔並放入/覆蓋當前存檔,看看它在重建存檔時是否修復了它。
轉到構建設置並添加
yourAppName/Resources/dist.plist到代碼簽名權利
在iOS 設備或選擇為構建目標的真實設備的情況下按cmd + B
完成后 -> 滾動到“產品”文件夾並右鍵單擊 yourAppName.app
選擇“在 Finder 中顯示”
創建一個名稱為Payload (大寫“P” )的文件夾
將yourAppName復制到您的 Payload 文件夾中
從您的有效負載文件夾創建一個 zip
將zip重命名為yourAppName.ipa
完畢
在嘗試了幾乎所有事情之后:
然后我注意到我的引導分區“可用磁盤空間不足”......大約 1GB 左右。 我重新啟動,然后獲得了大約 18GB 的免費空間。
然后打開 Xcode 和項目,執行存檔......令人驚訝的是(在嘗試構建存檔一個小時后)我終於得到了一個非通用存檔。
不知道它是否是修復它的免費磁盤問題,或者修復了它的 macOS 重新啟動,但它對我有用。
如果您在 Project>Targets>Build Phases>target dependencies 中有任何 .xcodeproj 文件,請將其從那里刪除,然后構建您的 ipa。 這個對我有用。 干杯
你可以在這里得到答案: xcode 正在創建通用 xcode 存檔而不是 iOS 應用存檔
就我而言,我不得不將 FMDB 和 BlocksKit 都移到靜態庫中。 以前,它們是作為子項目構建的。 請記住,您可以使用 lipo 來創建通用庫。 在構建最終產品時,模擬器代碼將被自動剝離。
另一個可能的原因是在“目標依賴項”中引用了不同平台的項目。 在我的特殊情況下,我正在開發一個共享 OSX 和 iOS 代碼的項目。 在其中一個 iOS 目標中,我不小心添加了一個 OSX 目標作為依賴項。
為了徹底,我發布了我的解決方案。
我在嘗試在 Xcode 5.1.1 (5B1008) 中構建 iOS 項目的存檔時遇到了完全相同的問題。 以上建議都沒有解決問題,而且其中大部分都是無關緊要的(我沒有添加任何框架,並且在我的構建階段的 Copy Headers 部分中沒有任何公共條目)。
在我的情況下,解決問題包括簡單地關閉我的項目,刪除我以前制作的所有存檔,轉到首選項> 帳戶,刪除我的開發者帳戶,退出 Xcode,重新啟動,重新添加我的開發者帳戶,開始存檔過程再次。 這立即解決了我的問題。
另一種解決方案,因為以上所有對我都不起作用......
將User Header Search Paths
(我想Header Search Paths
可以優雅地工作)更改為"$(BUILT_PRODUCTS_DIR)/BlocksKit"
。
背景:
在 BlockKit 中,開發人員在主項目中構建了與部署結構不同的頭文件。 因此,您不能引用項目中的頭文件,而必須引用復制到構建目錄中的頭文件。
這在 (Xcode 5) 中對我有用的方式我有 2 個目標,當我編輯方案時,在方案編輯器的左窗格中,您將看到 [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] 從 BUILD 窗格中,您將看到您的項目目標列在列表中。 在最右端,您將看到 ARCHIVE 選項,確保只選擇一個目標進行歸檔。
我在我的項目中選擇了 2 個目標,我只在產品中檢查了我想要的目標,並且成功了!
我通過在 XCode 中單獨打開應用程序項目解決了這個錯誤,即。 不打開包含應用程序和其他項目/庫/框架的工作區。
有 2 個單獨的項目,一個框架或共享庫和一個 iOS 應用程序,我必須打開 2 個不同的 XCode 窗口,每個窗口都直接打開.xcodeproj文件而不是公共.xcworkspace ,以便預先構建每個。
作為一個很好的副作用,在我執行Clean后,XCode 不再重建每個項目的每個目標,從而縮短了構建時間。
背景:我正在創建一個開源 SDK 和一個演示 iOS 應用程序。 我都在一個工作區中打開過。 在 SDK 目標上將Skip install設置為YES會阻止任何人創建存檔,因為它是空的,所以這不是一個選項。 使用Project而不是Public headers 會導致存檔丟失應該分發的頭文件,所以這也不是一個選項。
因為那是因為我在工作區工作。 該項目已存檔,但不會顯示在組織者窗口中。 我關閉了工作區並自行打開了項目。 已在組織者中打開存檔...希望對您有所幫助。
就我而言,我有一個自定義腳本將一些臨時文件復制到:
${TARGET_BUILD_DIR}/myTempDir
這意味着,在調查存檔以檢查其內容后,我在 .app 文件旁邊發現了一個 myTempDir 文件夾。 一旦我修改了腳本以保存在別處,事情就被排序了。
嘗試在 Framework 項目的公共標題文件夾路徑中設置 $(PROJECT_NAME)Headers。 您必須去構建庫目標的設置,然后將公共標題文件夾路徑編輯為 $(PROJECT_NAME)Headers。
我在向我的 iOS 應用程序的項目添加 OS X 命令行工具后遇到了這個問題,並且默認情況下,命令行工具的目標跳過安裝被設置為 NO。 由於您顯然無法將 OS X 二進制文件安裝到 iOS 設備,因此存檔默認為通用 Xcode 存檔。 將此目標的跳過安裝設置為 YES 解決了該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.