1)使い方ldid -S
は正しい使い方です。小文字 ( -s
) ではありません。
2)通常、このエラーが発生するのは、間違ったアーキテクチャでアプリをビルドしたことが原因です。ldid
私が使用した古いバージョンのほとんどは、ファットバイナリに署名できません (ただし、以下の更新を参照してください)。ファット バイナリは、内部に複数のアーキテクチャを持つものです。たとえば、デュアルarmv6
とarmv7
実行可能ファイルです。または、Xcode 4.5 では、おそらくデフォルトでarmv7
andになっていarmv7s
ます。
プロジェクトのビルド設定で、Architectures、 Valid Architectures、およびBuild Active Architecture Only設定を使用して、ビルドされるアーキテクチャ実行可能ファイルを決定します。ジェイルブレイク開発では、通常Build Active Architecture Onlyを に設定しYES
ます。armv6
および に設定された有効なアーキテクチャarmv7
。
3)また、一部の古いバージョンでは、実行可能ファイルにldid
署名できませんarmv7
。ここにあるKennyTM のサイトからビルド済みのコピーを取得すると、 armv7
. これは Mac OS X 用にビルドされているため、Xcode にサインインせずにビルドした後、iPhone にアップロードする前にldid
、Mac の実行可能ファイルで実行するように設計されていることに注意してください。
新しい携帯電話は通常、古いアーキテクチャ用にビルドされた実行可能ファイルを実行できますが、その逆はできません。したがって、サポートしたい最も古いアーキテクチャ用にビルドしてください。新しいアーキテクチャでは、いくつかの最適化が失われるだけです (ほとんどの人はあまり気にしません... アプリにこれらの最適化が必要かどうかお知らせください。詳細を投稿します)。
したがって、古いデバイス (iPhone < 3GS) をサポートしたい場合は、Architecturesをonly armv6
に設定し、デフォルト設定の を必ず削除します$(ARCHS_STANDARD_32_BIT)
。比較的新しいもののサポートのみが必要な場合は、 を選択しますが、バイナリに署名できるarmv7
バージョンを使用していることを確認してください。ldid
armv7
編集:署名しようとしていた実行可能ファイルが太ったものかどうかを判断するには、コマンド ラインで次のコマンドを実行します。
> cd HelloJB.app
> ls
HelloJB Info.plist PkgInfo date.zip en.lproj
> lipo -info HelloJB
Non-fat file: HelloJB is architecture: armv7
上記の出力からわかるように、私のHelloJB
実行可能ファイルはファットではなく、armv7 コードしかありません。
アップデート
ここにある ldid のビルド済みバージョンは、ファットな実行可能ファイルに署名できるldid
ようになったと思いますが、そうでないバージョンがまだ出回っています。また、最新バージョンのiOSOpenDevをインストールすると、fat 実行可能ファイルに署名できるバージョンが提供されると思いますldid
(のデフォルトのインストール場所/opt/iOSOpenDev/bin/ldid
)。