最近Xcode 8に切り替えたiOSアプリがあります。その一部として、Swift 2.2から2.3に切り替えました(Swift 3は後ほど提供します)。
本質的にxcodebuild
を実行して専用のビルドマシンでリリースバイナリを生成する自動ビルドパイプラインがあり、それをすべて整理した後(Xcode 8の自動コード署名は本当にすべてを台無しにします)、今私はiTunes Connectにアプリをアップロードすると、次のエラーで失敗します。
エラーITMS-90171:「無効なバンドル構造-バイナリファイル「MyApp.app/libswiftRemoteMirror.dylib」は許可されていません。アプリには、サポートされているバンドルのCFBundleExecutable以外のスタンドアロンの実行可能ファイルまたはライブラリを含めることはできません。 iOSアプリのバンドル構造については、 https://developer.Apple.com/go/?id=bundle-structure のガイドをご覧ください。」
案の定、.ipaファイルを解凍して見てみると、libswiftRemoteMirror.dylib
そこに座っています。
Xcodeを介してiTunes用にアーカイブ/エクスポートすると、libswiftRemoteMirror.dylib
、ただし、私のアプリの他のすべてのビルドには含まれているようです。 Xcode内でデバッグビルドを行ってから出力を見ると、libswiftRemoteMirror.dylibがアプリのバンドルに含まれていることがわかります。これは、Xcode自体が自動ビルドスクリプトの一部ではなく間違いなくそこに置いていることを示しています。
このファイルは何ですか、なぜそこに置かれているのですか、それについてどうすればよいですか?リリースビルド用にこのファイルを削除するようにビルドスクリプトを変更できますが、コード署名プロセスに影響する可能性があります。とにかく試してみて、何が起こるか見てみますが、それは正しいことではないように感じます。
アドバイスをいただければ幸いです。
コマンドラインのxcodebuildを自動コード署名で動作させることはできませんでした。自動ビルドマシンは、SSHを介してのみアクセスされる別のアカウントとして実行されるため、そのユーザーアカウントとして「完全な」Xcodeが実行されることはなく、ログインキーチェーンなどに証明書が存在しないためだと思います。
shenzhen
のようなものは使いたくありませんでした。なぜなら、私は過去にそのようなことから悪い経験しかなかったからです。 Xcodeビルドシステムは複雑で壊れやすいので、スクリプトを追加したり、間違ったり古くなったりする可能性のあるものを追加する必要はありません。
問題を解決するために私がやったことは次のとおりです(それは恐ろしいことですが、最終的に機能するようになったのは私が見つけることができる唯一のものでした)
自動ビルドスクリプトで_.pbxproj
_を編集して、_Provisioning Style = Automatic;
_を検索し、_Provisioning Style = Manual;
_に置き換えます。また、同じpbxprojファイル内のコード署名用の_iOS Developer
_を_iOS Distribution
_に置き換えます。これら2つのことは自動署名をオフにします
xcodebuild
を実行して、Xcode7で行ったのと同じ方法でプロジェクトをビルドします(アーカイブはしません)。 Xcodeはアプリをコンパイルして署名しますが、_libswiftRemoteMirror.dylib
_が含まれており、何らかの理由で資格ファイルがないため、まだ有効ではありません
アプリバンドルから_libswiftRemoteMirror.dylib
_を削除します(これにより署名が無効になります)
プロビジョニングプロファイルからエンタイトルメントビットを抽出して、アプリバンドルフォルダーに_Entitlements.plist
_を生成します( BlackBerryのSWSiOSResign.sh スクリプトのように)
_codesign --entitlements <file>
_を使用してアプリバンドルに再署名します
そこから、 _bq/package_ipa.sh
_ と同様の手法を使用してSwiftSupportフォルダーをコピーし、ファイルをipa
にZipします。
私は実際には_package_ipa.sh
_ファイルを使用できませんでした。アプリがまだSwift 2.3であるため、SwiftSupportを取得するには_Swift_2.3.toolchain
_を参照する必要があるため、代わりに同様のロジックを再実装する必要がありました-_XcodeDefault.toolchain
_ではありません(Swift 3です)
これらの手順の一部を回避するために、_xcodebuild --archive
_を他のいくつかと組み合わせて使用できるはずです。 Xcode7でそれを機能させることはできませんでしたが、時間があればXC8でもう一度試すかもしれません
私の場合、カスタムフレームワークを使用しているため、エラーITMS-90171が発生しました。
「無効なバンドル構造-バイナリファイル「MyFramework.framework/libswiftRemoteMirror.dylib」
(自分のアプリケーションでそれを取得できませんでした。)
私はジムを試しました しかし、xcrunで立ち往生しました 。だから私はrm -rf libswiftRemoteMirror
私が持っているすべてのカスタムフレームワークのビルドフレーズ(カスタムの実行スクリプトを使用)で、興味深いことに、何も壊していませんでした。
最近、プロジェクトでSwift=を使用し始め、同じエラーが発生しました。
根本的な原因を見つけるために、「grep -Ril "libswiftRemoteMirror"」を実行しました。 XCode.app(現在10.1があります)で../Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/XCLanguageSupport.xcplugin/Contents/Resources/Swift-stdlib-toolが見つかりました。 xcspecファイル。それは言います:
// Swift_RESOURCE_DESTINATION and Swift_RESOURCE_LIBRARY allow us to copy
// libswiftRemoteMirror.dylib into place so that memory debugging tools have access to it
// on device.
// We disable these options in "DEPLOYMENT" modes, so that the libswiftRemoteMirror.dylib
// does not make its way into archives submitted to the App Store.
そのため、ソリューションは簡単です-XCodeターゲット設定で、リリース構成(またはビルドに使用するもの)に対してDeployment PostprocessingをYesに設定します
Xcode 8をインストールした後、 shenzhen でビルドすることで同じ問題に遭遇しました。
私は Fastlane を代替手段として見ることにし、それらの gym
プログラムはAppleに提出できるipaを生成します。
ipa
(深センの実行可能ファイル)への呼び出しをgym
への呼び出しに置き換えるのはかなり簡単で、残りのビルドおよびアップロードスクリプトは修正なしで機能しました。
直接ビルドしたい場合は、gym
readmeから以下を取り上げました。 .xcarchive
なしの.app
ファイルを含むlibswiftRemoteMirror.dylib
を生成します。私はそのようなフローを自分で使用しないので、そこからどのように進むか言うことはできません。
xcodebuild \
-scheme Scheme \
-workspace Project.xcworkspace \
-configuration 'Release' \
-destination 'generic/platform=iOS' \
-archivePath './Output.xcarchive' \
archive
ビルド設定に移動して、問題が解決するのを待ってください。
xcodeからビルドをアーカイブするには、アーカイブファイルを右クリック-> Finderで表示->右クリック->パッケージコンテンツを表示->製品-> appliction-> .appファイルをコピーし、Application Loaderを使用してペイロードを生成してアップロードします。それは私の場合に役立ちます。