XcodeでiOSアプリアーカイブを生成できません


175

アプリケーションからのiOSアプリアーカイブの生成に問題があります。アプリケーションは問題なくコンパイルされ、シミュレータでも動作します。今、私はその場限りのテストをしたかったので、iOS App Archiveを生成できません。[製品]-> [アーカイブ]をクリックすると、一般的なxcodeアーカイブが生成されます。誰かが私を助けてくれますか?このアプリケーションのiOS App Archiveをすでに生成していることを述べておきます。何らかの理由でiOSアーカイブを生成するために停止しました。どうもありがとう。


7
問題はxcodeからアーカイブを生成することに関するものですが、を使用してこの問題に直面しましたxcodebuild。解決策は、目的地を指定することです:xcodebuild -destination generic/platform=iOS
DB42

@ db42に感謝します。
2015年

1
解決策について詳しく説明できますか?どこで変更を行いますか?
jlo-gmail 2016

プロジェクト>ターゲット>ビルドフェーズ>ターゲットの依存関係に.xcodeprojファイルがある場合は、そこから削除し、ipaをビルドします。わたしにはできる。乾杯
カルペシュパンチャサラ2016年

回答:


316

ビルド設定を確認します。

  1. メインプロジェクトターゲットのインストールのスキップは不可
  2. フレームワーク(サブプロジェクト)ターゲットの場合、インストールのスキップはYESです
  3. サブプロジェクトのビルドフェーズでは、ヘッダーのコピーはパブリックではなくプロジェクトにある必要があります(静的ライブラリをビルドする場合は適用されません)
  4. 展開中のインストールディレクトリは有効です(/ Applicationsなど)

2
これは、上記の部分的な回答を組み込んだ最も完全な回答です。アレックスLありがとう!これが、この質問に対する選択された答えであるべきだと思います。
ブランドン

3
メタ質問として、どのようにこれを理解しましたか?ビルド関連の質問はすべてStackoverflowに依存しているようです。
philipkd 2013

4
綺麗な!これはプロビジョニングプロファイルの問題だと思いましたが、これはうまくいきました。サブプロジェクトはroute-me / MapViewのmapboxブランチでした。以下の投稿にあるように、ヘッダーのコピーは重要でした。サブプロジェクトのビルドフェーズにあります。
rcarver 2013年

7
#3で問題が解決しましたが、アーカイブがiOSアプリアーカイブとして構築される前に、ファイルをプライベートからプロジェクトに移動する必要もありました。
Thomas Hajcak 2013

4
技術的には、問題は[ヘッダーのコピー]でヘッダーが[パブリック]になっているのではなく、[ビルド設定]> [パブリックヘッダーのフォルダーパス]がデフォルトのに設定されていることです/usr/local/include。静的ライブラリを構築している場合、ヘッダーパブリックである必要あります。そのため、#3がパブリックヘッダーフォルダーのパスをより適切なものに変更する場合は、より正確です。include/$(TARGET_NAME)。@CopperCashは以下の回答でこれを指摘しています。
bcattle 14

75

これは、フレームワーク/ライブラリを追加した場合に発生する可能性があります。そのライブラリの[ターゲット]-> [ビルド設定]を編集し、[スキップインストール]設定を[はい]に設定する必要があります。再アーカイブすると、XCodeは「一般的なxcodeアーカイブ」ではなく「iOSアプリアーカイブ」の生成を再開します。


しかし、「スキップインストール」はxcode 4.4.1では使用できません。少なくとも、xcodeでスキップイントールを見つけることができません
Mashhadi

2
同じことが追加されたバンドルにも当てはまります。
Mark Horgan、2013年

62

インストールスキップしてはいに加えて、アプリプロジェクト内で別のlib / framworkプロジェクトを開いた場合は、ビルドフェーズでヘッダー(存在する場合)をパブリックからプロジェクトに移動する必要があります/ヘッダーのコピーで

build phase of your lib/framwork target


3
Skip Install to Yesがうまくいかなかったので、私はちょうど希望を失うところだった。ヘッダーをプロジェクトにコピーするのが私にとってはうまくいきました。ありがとう!
ksm 2012

10
障害のあるXcodeサブプロジェクトをローカライズするのに役立つように、FinderでGeneric Xcode Archiveを表示して、パッケージを調べることができます。.xcarchive内で、Products / usr / local / includeに不良ヘッダーが表示されます。
MonsieurDart

1
ヘッダーをコピーするためにいくつかのファイルを公開してこれを台無しにするのはなぜですか?
mskw 2013年

mskw、ビルドされたアーティファクトに1つ以上のパブリックヘッダーが含まれている場合、それは「デバイスデプロイ可能な」アーカイブ(IPAを生成した場所からのiOSアプリアーカイブ)にはなりません。Xcodeプロジェクトアーカイブのままです。ありがとう
ebtokyo

1
くそー、ありがとう、これは私のために働いた..あなたはこれらの種類の解決策をどうやって見つけたのだろう:)
Fabio Napodano 2013年

45

私はそれを私のために機能させるために次のことをしました:

  1. 私はthree20静的ライブラリを持っていて、ココアポッドを使用しましたメインプロジェクト内のファイルをインクルードします
  2. 他のすべてのサブプロジェクト/静的ライブラリのスキップインストールに従い、コピーヘッダーを上記のようにパブリックからプロジェクトに切り替えました
  3. 最も重要なこと:プロジェクトが使用する各ライブラリで、ビルドフェーズ->ファイルのコピーに移動し、宛先がからAbsolute pathに変更されてproducts directoryいることを確認します。注:このエラーの原因となっているライブラリを見つけるために検索を絞り込むには、以下のヒントを参照してください。

そしてそれはそれでした!

ヒント:アーカイブがipaではなくアーカイブファイルを作成する原因となっている問題のあるファイルについて知るには、次のようにします。

  1. アーカイブを選択し、[配布]ボタンをクリックします。
  2. 「ビルドされた製品を保存」オプションを選択します。
  3. [次へ]をクリックして保存します。
  4. 作成したディレクトリをFinderで閲覧します。
  5. 「ライブラリー」サブディレクトリーは、「インストールのスキップ」を「はい」に設定する必要があるライブラリーを識別します。
  6. 場合によってusr/local/includeは、パブリックからプロジェクトに移動する必要がある原因となるヘッダーファイル、または絶対パスから製品ディレクトリに変更する必要があるファイル(または、スキップインストールをyesフラグに設定するのを忘れたファイルでさえも)を識別します。ただし、そのディレクトリ(つまり、usr / local / include)は、サブライブラリのディレクトリ構造によって異なります。多くの場合、.. 上記のステップ3の[ ファイルのコピー]にリストされているすべてのファイルがここに表示されます。ここでそれらを見つけたら、問題の原因について明確な答えがあります。

ヒントへの更新:人生をさらにシンプルにするために..上記のヒントのステップ4で表示されるファイルは何でも.. xcodeのグローバル検索でそれを検索するだけです。これは私のフォルダーの内容でした(上記のヒントの手順に従ってください)。

ここに画像の説明を入力してください

だから私はそれがcryptosslライブラリと関係があると言えるかもしれません。それらを検索する:

ここに画像の説明を入力してください

スキップインストールを「はい」に設定するのを忘れたことに気づきました。


素晴らしいヒント!一部のフレームワークヘッダーを「プライベート」に変更しました。何らかの理由で、これによりそれらがにコピーされていました./usr/local/include
Ben Mosher 2013

1
@BenMosherを手助けできることはいつでも喜びです:)
13

1
私が得た最良の答え。ヒントをありがとう、私の日を救った。!
neywen 2013

間違いなく私が探していた答え-ビルド製品を保存することで、問題の正確な原因がわかりました。
Dennis L

「Save Built Products」に関するこの広範な回答はとても役に立ちます。 @ abbood、ありがとうございます。いつかは恩返しできるといいな。
Scott Corscadden、2016年

21

アーカイブをエクスポートする場合は、アーカイブを開いて/urs/local/include製品でこの提案を試してください:

各ポッドのの下PackagingPrivate Headers Folder Pathあり、Public Headers Folder Pathに設定されてい/usr/local/includeます。それらをクリアすると、有効なアーカイブが取得されます。

ここに画像の説明を入力してください

React Nativeアプリを0.11.0Xcode 7およびCocoaPods にアップグレードした後、私のために働いた0.39.0.beta.4


1
これが動作することを確認できます!プライベートヘッダーパスとパブリックヘッダーパスの両方をクリアすることを覚えている限り。また、すべてのポッドを選択し、ヘッダーパスを検索して、それらをすべて一度にクリアするだけでも、かなり簡単です。
DIDS

1
私はこれが機能し、時間を大幅に節約したことも確認できます。これは、ポッドを0.39.0.betaバージョンにアップグレードしたときに発生しました
Bryan P

驚くばかり。私のために働いた:)私は1日半から苦労していました。ありがとう、ありがとう、ありがとう:) :) :)
Srikanth

これは私にとってXcode 7.0 iOS9で機能したものだと思います。私はココアポッドを持っていませんが、それでも問題は解決しました。おかげで男
ジェフH

これに加えて、これを機能させるために、WatchKit拡張機能とアプリでSKIP_INSTALLをYesに設定する必要がありました。
スノーマン、

12

CocoaPodsとWatchKitまたはToday Extensionを使用している場合、未解決の問題があります CocoaPodsでは、あなたの問題が何であるかを説明レポ。

私の解決策Copy Pod Resources、WatchKit ExtensionおよびToday Extensionのターゲットからフェーズを削除することでした。Build Phases。これを実行すると、プロジェクトは期待どおりにコンパイルおよびアーカイブされました。

これが誰かを助けることを願って、これは私が一日中困惑していました!


1
@ Lewis42は常にバウンティを追加できます;)
rebello95 '20

オプションは表示されません。コメントへの賛成投票が必要です;)
lewis

@ Lewis42あなたは賞金を質問に追加し、それを回答に授与する必要がありますlol
rebello95

@ rebello95、あなたは男をロック!
Matt

10

上記の回答のいずれかが機能しない場合、問題はおそらくにありcocoaPodsます。最新のアップデート0.38.1で問題が発生しましたが、ダウングレードする0.37.1と通常に戻りました。使用するXcode 6.3.1

後で編集:に更新する0.38.2と、これも修正されます。この問題の原因についての詳細:Cocoapods 0.38.1は有効なアーカイブの作成に失敗しました


3
に更新しましたが0.38.2、まだ問題があります。Xcode 7を使用していますか?
ポーター

@PorterHoskins Xcode 7はXcode 6で有効なアーカイブをビルドする同じプロジェクトから有効なアーカイブをビルドしないため、この問題を書き留めました。Cocoaポッド0.38.2を使用していますが、Xcode 6を使用するとすべてうまくいきますが、Xcode 7ではアーカイブが正しく作成されません。フォルダー構造をチェックして、パッケージ内の.appの外に.appexファイルがあるかどうかを確認しましたか?
シロクマ

にフレームワークがあり/Library/Frameworksます。動的なフレームワークとして構築されていないGoogleのカカオポッドと関係があるのではないかと思います。それは次のように聞こえるgithub.com/CocoaPods/CocoaPods/issues/3889
ポーターホスキンス

3
ビルドフェーズ/ヘッダーのすべてのポッドヘッダーをパブリックからプロジェクトセクションに移動し、それが機能しました。実際、問題はCocoaPodsにある可能性があります。
Denis Kutlubaev

7

私はXcode5を使用していて、それをソートするためにビルドスキームを編集していましたが、該当する上記の提案をすべて試しても、私の場合は役に立ちませんでした。

「App」と「App FREE」という2つのターゲットがありました。アプリの「通常」バージョンの後に追加した無料バージョンをアーカイブしようとしたときに、一般的なアーカイブに関する問題が発生しました。私の場合、ツールバーでスキームを選択し、[スキームの編集]を選択すると、ビルドセクションに2つのターゲット、つまりAppとApp FREEがあることがわかりました。

Appのすべての列をオフにし、App FREEの列のみをオンにして、[OK]をクリックしました。次に[製品]> [アーカイブ]を選択したとき、ジェネリックアーカイブの代わりにアプリを無料で入手しました。:)


7

プロジェクトが1つしかない場合は、このソリューションが役立つでしょう。この問題は、ターゲットを複製したときに発生していました。その結果、2つのターゲットを並行して構築しました。これが問題の原因でした。汎用IOSアーカイブが構築されました。

パラレルビルドをオフにするには、

  • スキームを管理し、
  • スキームの編集、
  • ビルド、
  • 他のターゲットを削除してください。

5

iOS 9とXcode 7にアップデートした後、この問題が発生しました。JoshHのソリューションがうまくいきました。

各ポッドの[パッケージング]で、[プライベートヘッダーフォルダーパス]および[パブリックヘッダーフォルダーパス]が/ usr / local / includeに設定されています。それらをクリアすると、有効なアーカイブが取得されます。

また、Podfileでこれを自動的に行うためのポストインストールスクリプトも作成しました。

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

ポッドファイルの一番下に追加して実行するだけです pod install


5

ワークスペースに複数のプロジェクト(GTL、ポッド、およびメインプロジェクト)があり、これが私にとってうまくいきました。

プロジェクトを選択します。2つのタイプがあります。プロジェクトターゲットがあります。ます。ます。

GTLまたはのようなあなたのメインではないプロジェクトの場合PODS

プロジェクト:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

ターゲット:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

メインプロジェクト(通常は製品名と同じ名前):

プロジェクト:

Skip Install = NO
Installation Directory = /Applications

ターゲット:

Skip Install = NO
Installation Directory = /Applications

各プロジェクトとターゲットのiosデプロイメントターゲットをチェックして、それらがすべて同じであることを確認します。


段階的に説明してくれてありがとう。それは本当に私の問題を解決するのに役立ちました。
Arslan

4

私はこの問題を抱えていました。私の場合、それはMacアプリのターゲットをiOSアプリの依存関係として維持することによって引き起こされました。

このようにセットアップされた理由は、MacアプリがiOSアプリのデータを生成するために使用されるツールであり、それがバンドルに含まれていたためです。

iOSアプリ自体のビルドを行う前に、その依存関係を削除し、ツールを個別にビルドする必要がありました。


lippdなどのライブラリにはiosとosxの両方のターゲットが付属しているので、osxのターゲットを削除するのを忘れていました... doh
james_alvarez

4

私のシナリオでは、Swiftコードを主にObjective-Cプロジェクトに含め始めた後でのみ、誤った「Generic Archive」を取得していました。多くのトラブルシューティングとXcodeが吐き出したアーカイブファイルの調査の後、私はSwiftSupport(Swiftランタイムに必要なdylibsを含む)フォルダーが、バニラの新しいSwiftプロジェクトアプリアーカイブとは別の場所にあることに気付きました。

Installation Directoryビルド設定を見つけ、プロジェクトのカスタムパスに設定されていることに気付きました。私は単にそれを削除し(その一般的な値をに設定/Applications)、次のビルド->アーカイブは期待どおりに機能し、適切なiOSアプリアーカイブを提供しました。

TL; DR:特に予期しないレガシービルド設定が含まれている可能性がある古いプロジェクトファイルで開始する場合Installation Directoryは、ビルド設定が/ApplicationsアプリにSwiftコードを含めるときのデフォルト値に設定されていることを確認してください。


3

これをそのままにして、同じ旅から他の人を救います。

ワークスペースの静的ライブラリターゲットから、同じPodリソースのコピービルドフェーズを削除する必要があることもわかりました。


上記の多くのことを試した後、これは私のために働きました(Xcode 7)
humphriesj 2015年

2

Alex Lの回答への追加。

ポイント3.「ビルド設定」->「パブリックヘッダーフォルダーパス」を「include / xxx」に変更しても機能します。


これは上記の#3よりも正しいです。静的ライブラリを構築する場合は、ヘッダーを公開する必要があります
bcattle

2

上記のどれもあなたを助けなかった場合...長い時間の後で...

バンドルバージョンショート1.0だけで十分満足していたため、バンドルバージョンのInfo.plistの値を削除しました悪い。これを行わないでください。

*実際には、右側のUIで編集してこれを行ったので、Info.plistファイルに空のキーが挿入されることを認識していませんでした。それはそれが無効になると思います。バンドルはアーカイブ中に他のアイテムとして表示され、アイコンがなく、どこにもアップロードできませんでした。

つまり、Info.plistの無効な値になります。有効なアーカイブでない場合は、古いアーカイブを解凍し、現在のアーカイブをドロップ/上書きして、アーカイブの再構築時に修正されるかどうかを確認してください。


1
  1. ビルド設定に移動して追加します

    yourAppName / Resources / dist.plistコード署名エンタイトルメントに

  2. ビルドターゲットとして選択されたiOSデバイスまたは実デバイスでcmd + Bを押します。

  3. 完了したら、「製品」フォルダまでスクロールし、yourAppName.appを右クリックします。

  4. 「Finderに表示」を選択します

  5. Name Payload大文字の「P」)でフォルダを作成します

  6. yourAppNameをペイロードフォルダーにコピーします

  7. ペイロードフォルダからzip作成します

  8. zipの名前yourAppName.ipaに変更します。

完了


1

ほぼすべてを試した後:

  • クリーン、アーカイブ
  • DerivedDataの削除、アーカイブ
  • Xcodeの再起動(XCode7を使用していた)、アーカイブ
  • 上記の組み合わせ...

その後、私のブートパーティションが「空きディスク領域が少ない」...約1GBであることに気付きました。再起動すると、約18 GBの空きができました。

その後、Xcodeとプロジェクトを開き、アーカイブを実行しました...そして驚くべきことに(アーカイブを構築しようとしてから1時間後)、ついにGeneric以外のアーカイブを取得しました。

それを修正した空きディスクの問題なのか、それを修正したmacOSの再起動なのかはわかりませんが、私にとってはうまくいきました。



0

私の場合、FMDBとBlocksKitの両方を静的ライブラリに移動する必要がありました。以前はサブプロジェクトとして構築されていました。Lipoを使用してユニバーサルライブラリを作成できることに注意してください。最終製品を構築するとき、シミュレーターのコードは自動的に取り除かれます。


0

これの別の考えられる理由は、異なるプラットフォームのプロジェクトへの「ターゲット依存関係」に参照があることです。私の特定のケースでは、OSXとiOSのコードを共有するプロジェクトに取り組んでいました。iOSターゲットの1つで、誤ってOSXターゲットを依存関係として追加しました。


0

徹底するために、私は私の解決策を投稿しています。

Xcode 5.1.1(5B1008)でiOSプロジェクトのアーカイブをビルドしようとすると、まったく同じ問題が発生しました。上記の提案はどれも問題を修正せず、それらのほとんどは無関係でした(フレームワークを追加しておらず、ビルドフェーズのヘッダーのコピーセクションにパブリックエントリがありませんでした)。

私の場合、問題の修正は、プロジェクトを閉じる、以前に作成したアーカイブを削除する、設定>アカウントに移動する、開発者アカウントを削除する、Xcodeを終了する、再起動する、開発者アカウントを再度追加する、アーカイブプロセスを開始する、という構成でした。再び。これは私の問題をすぐに修正しました。


0

上記のすべてが私にとってうまくいかなかったので、もう1つの解決策...

変更User Header Search Paths(私は考えHeader Search Pathsに同じようにエレガントに働くだろう)"$(BUILT_PRODUCTS_DIR)/BlocksKit"

背景

BlockKitでは、開発者はメインプロジェクトのヘッダーを配置時の構造とは異なる構造にしています。したがって、プロジェクトのヘッダーを参照することはできず、ビルドディレクトリにコピーされたヘッダーを参照する必要があります。


0

これが私のために機能した方法(Xcode 5)には2つのターゲットがあり、スキームを編集すると、スキームエディターの左側のペインに、[ビルド、実行、テスト、プロファイルXXX.APP、分析、アーカイブ]が表示されます。 ] BUILDペインから、プロジェクトターゲットがリストに表示されます。右端にアーカイブの選択が表示されます。アーカイブするターゲットが1つだけ選択されていることを確認してください。

プロジェクトで2つのターゲットを選択し、製品で必要なターゲットのみをチェックしたところ、うまくいきました。


0

XCodeでアプリプロジェクトのみ開くことで、このエラーを解決しました。ワークスペースを開かないアプリケーションと他のプロジェクト/ライブラリ/フレーム構成されるを。

2つの個別のプロジェクト、フレームワークまたは共有ライブラリ、およびiOSアプリケーションがあるため、それぞれを適切にビルドするために、それぞれが共通の.xcworkspaceではなく.xcodeprojファイルを直接開くことにより、2つの異なるXCodeウィンドウを開く必要がありました。

良い副作用として、XCodeはCleanを実行した後、すべてのプロジェクトのすべてのターゲットを再ビルドしなくなり、ビルド時間が短縮されました。

背景:オープンソースSDKとデモiOSアプリケーションを作成しています。両方とも1つのワークスペースで開いていました。SDKターゲットで[ インストールのスキップ]YESに設定すると、アーカイブが空になるため、誰もアーカイブを作成できなくなり、これはオプションではありませんでした。Publicヘッダーの代わりにProjectを使用すると、配布する必要のあるヘッダーファイルがアーカイブから失われるため、これもオプションではありませんでした。


0

それは私がワークスペースで働いていたからです。プロジェクトはアーカイブされましたが、主催者ウィンドウには表示されません。ワークスペースを閉じて、プロジェクトを自分で開きました。アーカイブは主催者で開かれています...それがお役に立てば幸いです。


0

私の場合、一時ファイルを次の場所にコピーするカスタムスクリプトがありました。

${TARGET_BUILD_DIR}/myTempDir

つまり、アーカイブを調べてその内容を調べたところ、.appファイルのすぐ隣にmyTempDirフォルダーが見つかりました。スクリプトを変更して別の場所に保存したら、並べ替えを行いました。


0

フレームワークプロジェクトのパブリックヘッダーフォルダーパスに$(PROJECT_NAME)Headersを設定してみてください。ライブラリターゲットの設定を作成し、パブリックヘッダーフォルダーのパスを$(PROJECT_NAME)Headersとして編集する必要があります。


0

Xcode 7cocoapods v.0.38.2で使用する場合。copy pod resources今日の拡張ターゲットから削除してみてください。

ここに画像の説明を入力してください


0

OS XコマンドラインツールをiOSアプリのプロジェクトに追加した後でこの問題が発生し、コマンドラインツールのターゲットに対してデフォルトでスキップインストールがNOに設定されました。OS XバイナリをiOSデバイスにインストールできないことは明らかなので、アーカイブはデフォルトで一般的なXcodeアーカイブに設定されます。このターゲットの「インストールのスキップ」をYESに設定すると、問題が修正されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.