8

iOS 5.1/iPhone 4s (ジェイルブレイク) で署名されていないアプリケーションを実行しようとしています。私がしたこと:

  1. XCode でのコード署名を無効にします。

  2. 署名されていない iPhone アプリを作成しました。

  3. /User/me/development/HelloWorld.appの場所にSSH経由でiPhoneにコピーしました

  4. 次に、署名をシミュレートして、このアプリケーションを iPhone で実行しようとします。次のコマンドを実行します。

.

cd /User/me/development
chmod -R 777 HelloWorld.app
ldid -S HelloWorld

ただし、次のエラーが表示されます。

util/ldid.cpp(567): _assert(78:arch != NULL)

このようなエラーの考えられる理由と、それを修正する方法は何ですか?

4

3 に答える 3

11

1)使い方ldid -S正しい使い方です。小文字 ( -s) ではありません。

2)通常、このエラーが発生するのは、間違ったアーキテクチャでアプリをビルドしたことが原因です。ldid私が使用した古いバージョンのほとんどは、ファットバイナリに署名できません (ただし、以下の更新を参照してください)。ファット バイナリは、内部に複数のアーキテクチャを持つものです。たとえば、デュアルarmv6armv7実行可能ファイルです。または、Xcode 4.5 では、おそらくデフォルトでarmv7andになっていarmv7sます。

プロジェクトのビルド設定で、ArchitecturesValid 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) をサポートしたい場合は、Architecturesonly armv6に設定し、デフォルト設定の を必ず削除します$(ARCHS_STANDARD_32_BIT)。比較的新しいもののサポートのみが必要な場合は、 を選択しますが、バイナリに署名できるarmv7バージョンを使用していることを確認してください。ldidarmv7

編集:署名しようとしていた実行可能ファイルが太ったものかどうかを判断するには、コマンド ラインで次のコマンドを実行します。

> 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)。

于 2012-10-07T22:03:40.390 に答える
3

Xcode 4.5 以降のように見えるものから始めて、おそらく 4.4 では確認されていませんが、ldid ツールを使用して疑似コード署名を行うには、ここから「コマンド ライン ツール」をダウンロードしてインストールするか、Xcode 内からダウンロードすることができます。設定 -> ダウンロード

そうしないと、次のようなエラーが発生します

  • ユーティリティ/ldid.cpp(584):
  • ./minimal/mapping.h(54): _assert(2:false)
  • ユーティリティ/ldid.cpp(567)
  • 等々

armv6 はサポートされなくなったため、「ファット」バイナリではなく、armv7 のみであることを確認する必要があります。

ldid -S ExampleApp

于 2012-11-06T06:57:59.633 に答える