[英]Xcode app archive validation fails for Mac App Store distribution due to lack of LC_VERSION_MIN in a Mach-O header
我有一個Swift項目,它使用NSTask調用命令行實用程序。
為了便於攜帶,我在應用程序的捆綁資源中包含了該命令行實用程序。
該實用程序非常復雜 - 它是一個Ruby解釋的應用程序,帶有一堆寶石,其中一些具有原生擴展。 這些gem都與Bundler一起安裝到實用程序中的標准供應商/目錄中。
我已經在第二台Mac上成功存檔,驗證,分發和運行應用程序,而第二台Mac上沒有通過開發者ID(“Mac App Store”外部)工作流程安裝的CLI實用程序(或Xcode)多次。
但是,存檔無法驗證Mac App Store分發時出現此錯誤:
2016-08-28 15:26:41 +0000 [MT]呈現:錯誤域= DVTFoundationNSBundleAdditionsErrorDomain Code = 1“無法在Info.plist CFBundleSupportedPlatforms中找到平台族或者在AbstractMemory.o中找到Mach-O LC_VERSION_MIN”UserInfo = {NSLocalizedDescription =無法在Info.plist CFBundleSupportedPlatforms中找到平台族或者在AbstractMemory.o中找到Mach-O LC_VERSION_MIN}
那么......為什么app工作流驗證會在MAS工作流程中失敗,而不是Developer ID工作流程會出現這樣的錯誤?
潛在的有趣點:
iconv
, xmlcatalog
) AbstractMemory.o
) ffi_c.bundle
, nokogiri.bundle
) libcapi.dylib
, libcharset.dylib
) libcharset.a
) 依賴項目最初是使用舊版本的Xcode和OS X編譯的,因此其中的許多Mach-O可執行文件在其標題中沒有LC_VERSION_MIN_MACOSX加載命令。 基本上我必須找到一種方法來擠壓該命令。
唯一可靠且干凈的方法是使用Xcode 7構建工具重新編譯依賴項目中的所有本機代碼。 如果依賴項是開源的,您可以自己完成。 如果不是,您將不得不懇求您的軟件供應商。
如果您需要Yosemite部署目標兼容性,您可能會冒險並在Yosemite構建框上使用Xcode 7.1 GM。 但我建議您在El Capitan構建盒上使用Xcode 7.1+重新編譯代碼,以確保您的二進制依賴性能與SIP等El Capitan之類的東西相媲美。
就我而言,依賴項目是開源的,所以我能夠:
otool -l [path to executable]
。 通過使用Travis CI的Mac構建機隊,我能夠設置多個OS X構建VM而不會生氣。
必須取消“包含用於調試的符號”以進行存檔驗證或導出。 這是因為符號化器無法處理第三方目標代碼。 我想這是因為它是為發布而構建的,因此目標代碼沒有附帶任何附帶的調試符號。
如果您無法重新編譯代碼,我聽說有關於可以將Mach-O加載命令加載到預先存在的二進制文件中的骯臟變通方法的傳聞。 這會遇到以下問題:
我將此問題交叉發布到Apple開發人員論壇, 網址為https://forums.developer.apple.com/message/175427 ,看看是否會由更專業的社區更快地得到答復。 事實並非如此,但您可以通過該鏈接找到對該問題的進一步討論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.