IOS打包主要分為Archive打包和.app文件打包谆构,題主之前一直用著.app文件打包的杯瞻,但是之前提交一個混編的swift項目打的包的時候亲雪,提交ipa報錯如下:
提示:ERROR ITMS-90171:Invalid Bundle Structure - The binary file XXX libswiftRemoteMirror.dylib is not permitted. Your app can’t contain standalone executables or libraries, other than the CFBundleExecutable of supported bundles……..
根據提示來看鸳兽,說是不應該存在libswiftRemoteMirror.dylib這個文件颁虐,當然這個文件在項目中是搜不到的,是在編譯打包后生成在.app文件中的仰剿,解壓ipa包就可以發(fā)現
后來创淡,經過多次實驗發(fā)現,可以通過以下幾種方式解決:
1.通過Xcode的Archive方式打包南吮。Archive打的包琳彩,就沒有包含這個libswiftRemoteMirror.dylib文件。
2.手動刪除.app中的libswiftRemoteMirror.dylib文件部凑,然后進行.app打包露乏。
3.在Xcode7中進行.app打包。在Xcode7和Xcode8中分別進行.app打包涂邀,發(fā)現Xcode7打包后沒有l(wèi)ibswiftRemoteMirror.dylib文件瘟仿。
由于筆者不想改變xcodebuild打包的腳本,也就是繼續(xù)用.app文件打包比勉,用xcrun壓縮成ipa的方式劳较,所以1否決。另外由于筆者這邊編譯機器已經整體升級到Xcode8浩聋,也不想回退回Xcode7观蜗,所以3否決。因此衣洁,筆者決定采用2的方式解決問題墓捻,編譯腳本手動刪除.app中的libswiftRemoteMirror.dylib文件,然后對.app進行重新簽名坊夫,最后再用xcrun壓縮成 .ipa文件
手動刪除libswiftRemoteMirror.dylib不難砖第,怎么對.app進行重新簽名才是重點撤卢,經過搜索,重簽名的步驟如下所示:
在xcodebuild 對工程進行編譯打包厂画,生成了對應的.app文件
1.刪除App里的libswiftRemoteMirror.dylib
rm YourApp.app/libswiftRemoteMirror.dylib
2.替換證書配置文件(文件名必須為embedded凸丸,不得自定義)
cp 你要簽名的mobileprovision路徑 YourApp.app/embedded.mobileprovision
3.生成entitlements.plist,后面重簽名要用
security cms -D -i 你要簽名的mobileprovision路徑 > entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' entitlements_full.plist > entitlements.plist
4.重簽名(certifierName為重簽名證書文件名袱院,可以加證書ID后綴)
certifierName="iPhone Distribution: olinone Information Technology Limited(6a5TVN58SY)"
codesign -f -s $certifierName --entitlements entitlements.plist YourApp.app
這3步完成后屎慢,就可以繼續(xù)用xcrun命令,把對應的.app文件壓縮成.ipa文件忽洛,而這個.ipa文件提交至appstore也就不會報錯了,至此問題已基本解決
參考資料如下:
http://www.olinone.com/?p=198
http://www.reibang.com/p/f4cfac861aac
http://www.cocoachina.com/ios/20141017/9949.html
http://blog.csdn.net/u013531246/article/details/52813598