XCode 6にアップグレードし、開発者IDで署名されたMacアプリをビルドしようとしました。ただし、次のコードサインエラーが発生します。
unsealed contents present in the root directory of an embedded framework
これは私が使用するDropbox.framework
にも当てはまります。明らかにそれは署名できませんでした。エラーはどういう意味ですか?なにが問題ですか?
OS Xコード署名の詳細 をご覧ください
OS Xバージョン10.9.5以降、OS Xが署名済みアプリを認識する方法が変更されます
OS Xバージョン10.9以降の期待に応じてバンドルを構造化します :
問題はversion.txt
にあるファイルDropbox.framework
。これはフレームワークがどのバージョンかを知るのに役立ちますが、コード署名に問題がなくなったようです。
ファイルを削除すると、すべてが再び正常に機能しました。
ヨセミテ以前の.frameworkバンドルをヨセミテに適合させようとしたので、今日数時間同じ問題がありました。結局のところ、問題は私が作成したシンボリックリンクであり、厳密にはディレクトリ内のファイルではありませんでした。
最初、パッケージのルートディレクトリに壊れたシンボリックリンクがありました。直した。
追加したシンボリックリンク:
Headers -> Versions/Current/Headers/
必要なもの:
Headers -> Versions/Current/Headers
その余分なスラッシュはキラーです。
これは2つの異なる場所で2回噛んだことに注意してください。
Current -> 1.8.0/
必要なところ
Current -> 1.8.0
私は* nixerではないので、これは常識かもしれませんが、うまくいけば、私のような他のWindows開発者に役立つでしょう。
私は今日同様の問題に遭遇しました...私のエラーは「バンドルルートに存在する封印されていないコンテンツ」でした。私の修正は、アプリで使用していたカスタムアイコンを削除することでした。 AppName.app/Icon?どういうわけか壊れていた...
私は今日これをしばらく調査しましたが、私が見つけた提案のどれも助けにならなかった、私のsdl_mixer.frameworkには、iTunesConnectを通り抜けることができなかった5つの埋め込みフレームワークがありました。私の解決策は、実際には必要のない3つを削除することでした。残りの2つは、sdl_mixerに埋め込まれていないスタンドアロンフレームワークとしてプロジェクトに追加されました。うまくいけば、これが誰かの役に立つと思います。私はこれに何時間も費やしました。
別のフレームワークに署名しようとしたときに問題にぶつかりました。ここでの答えは非常に刺激的です。フレームワーク構造にいくつかの問題があるはずですが、それらは見つかりました。構造は正しいようです、シンボリックリンクは "/"を末尾に付けていません。余分なファイルはありません(ls
でチェックしています)...
たくさん試してみて、ようやく余分な.DS_Store
フレームワークでは、これは本当に面倒です:(
それでもエラーが発生する場合は、隠しファイルがないか確認してください。
私も同じ問題を抱えていて、うまくいったのはDerivedDataフォルダーの内容を削除することでした。 Xcodeは問題の原因となっているリソースを特定しないため、すべてを最初から再構築しました。クリーンも機能しませんでした。
私の場合、私はいくつかの古いフレームワークが内部にあるアプリに署名しようとしていました。これらの提案はどれも役に立ちませんでした。このメッセージが表示されないようにするには、フレームワーク内からPkgInfoファイルを削除する必要があることがわかりました。
この問題の別の考えられる原因:同じ名前と同じインストール場所を持つiOSアプリとmacOSアプリをビルドしている場合、両方が同じアプリバンドルに書き込まれていることがあります。最初にiOSアプリビルドはそのコンテンツをアプリバンドルルートに直接配置し、次にmacOSアプリビルドはそのコンテンツをアプリバンドルの「Contents」フォルダーに配置します。その後、コードサインはiOSリソースについて不平を言います。
コードサインは非常に不透明であり、一般に問題のあるリソースが何であるかを伝えることを拒否しているので、私はこれを2回ヒットしたので、原因を追加します。
ある場合には、署名されていないバイナリ実行可能ファイルがありました。バンドル全体を歌う前に、各実行可能ファイルとフレームワークに個別に署名する必要があります。
それから私は別の事件を襲った。公開プロセスの一部としてコードに署名し、各実行可能ファイルとフレームワークに再署名します。しかし、Xcodeもバンドルに署名し、_CodeSignatureフォルダーに残骸が残っていることがわかりました。そこで、各実行可能ファイルとフレームワーク、次にバンドルに署名する前に、Xcodeで生成された_CodeSignatureフォルダーを次のように事前に削除します。
find MyApp.app -name _CodeSignature -type d -exec rm -rf {} +
うまくいけば、この成功した情報により、誰かがいつか時間を節約できることを願っています。