web-dev-qa-db-ja.com

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

アプリケーションからiOSアプリアーカイブを生成する際に問題があります。アプリケーションは問題なくコンパイルされ、シミュレーターでも動作します。今、私はSOMアドホックテストをしたかったので、iOS App Archiveを生成できません。製品->アーカイブをクリックすると、汎用のXcodeアーカイブが生成されます。誰も私を助けることができます。このアプリケーションのiOSアプリアーカイブを既に生成していることに言及する必要があります。何らかの理由でiOSアーカイブの生成が停止しました。どうもありがとう。

168
Filip Majernik

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

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

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

74
delany

スキップインストールからはいに加えて、アプリプロジェクト内で別のlib/framworkプロジェクトを開いた場合、publicからヘッダー(ある場合)を移動する必要があります to project in the Build Phase/Copy Headers

build phase of your lib/framwork target

61
ebtokyo

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

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

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

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

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

ヒントへの更新:生活をさらにシンプルにします。上記のhintの手順4で表示されるファイルはすべて、単にグローバル検索で検索します。 xcode ..そして、あなたは欲しいものに対して即座に結果を得るはずです..例えば、これは私のフォルダの内容でした(上のヒントの手順に従って):

enter image description here

だから、cryptoおよびsslライブラリと何か関係があると言えます。

enter image description here

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

43
abbood

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

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

enter image description here

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

21
Josh Habdas

WatchKitまたはToday拡張機能と同様にCocoaPodsを使用している場合、CocoaPodsリポジトリには、問題が何であるかを説明する issue があります。

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

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

12
rebello95

上記の回答のいずれかが機能しない場合、問題はおそらくcocoaPodsにあります。最新の更新0.38.1は私のために物事を台無しにしましたが、その後0.37.1にダウングレードし、物事は正常に戻りました。 Xcode 6.3.1を使用

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

10
Ehmad Zubair

私はXcode5を使用しており、それをソートしたのはビルドスキームの編集でしたが、適用可能な上記の提案をすべて試してもうまくいきませんでした。

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

Appのすべての列のチェックを外し、App FREEの列のみをチェックしたままにして、[OK]をクリックしました。次に[製品]> [アーカイブ]を選択したとき、汎用アーカイブの代わりにアプリが無料になりました。 :)

7
Stephen Watson

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

構築された並列をオフにするには

  • スキームの管理、
  • スキームの編集、
  • ビルド、
  • 他のターゲットを削除します。
6
roman777

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

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

GTLPODS:のようなメインではないプロジェクトの場合

プロジェクト:

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デプロイメントターゲットをチェックして、それらがすべて同じであることを確認します。

5
Bryan P

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

Podfileの最後に追加してpod installを実行するだけです

5
wyzkid207

この問題がありました。私の場合、MacアプリのターゲットをiOSアプリの依存関係として保持することが原因でした。

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

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

4
Tomas Andrle

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

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

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

4
Ryan Dorshorst

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

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

3
Michael

Alex Lの回答に追加。

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

2
CopperCash

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

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

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

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

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

    yourAppName/Resources/dist.plist to Code Signing Entitlements

  2. cmd + B with iOS DeviceまたはReal Deviceをビルドターゲットとして選択します

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

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

  5. 名前でフォルダーを作成しますペイロードcapital "P"

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

  7. Zipの作成ペイロードフォルダーから

  8. 名前変更 ZipをyourAppName.ipa

完了

1
LoVo

すべてについて試した後:

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

それから、ブートパーティションが「空きディスク領域が少ない」ことに気付きました。約1GBほどです。再起動すると、約18GBが無料になりました。

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

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

1
Peter Li

[プロジェクト]> [ターゲット]> [ビルドフェーズ]> [ターゲットの依存関係]に.xcodeprojファイルがある場合は、そこから削除してからipaをビルドします。わたしにはできる。乾杯

あなたはここで答えを得ることができます: xcodeはiOS App Archiveの代わりに汎用xcodeアーカイブを作成しています

1

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

${TARGET_BUILD_DIR}/myTempDir

つまり、アーカイブを調べてその内容を検査した後、.appファイルのすぐ隣にmyTempDirフォルダーが見つかりました。他の場所に保存するためにスクリプトを変更したら、物事はソートされました。

0
Eli

私の場合、他の30以上の回答はどれも機能していませんでした。アーカイブの場所([設定]-> [場所])を、サーバーを指すカスタムパスに設定しました(違いがある場合はWindows Server 2008)。

場所をローカルマシンのデフォルトの場所に戻すと、通常のiOSアプリアーカイブが作成されました。これがなぜ機能するのかはわかりませんが、他の人にも役立つことを願っています。

ここで、保存のために.xcarchiveファイルをサーバーに手動で移動する必要がありますが、少なくとも一般的なアーカイブで問題は発生しません。

0
alera729

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

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

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

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

0
ofavre

私の場合、ファイルのコピーにいくつかのファイルがありました。それらを削除しただけで、すべてが正常に機能し、iOSアプリアーカイブを達成しました。 Build Phases-> Copy Filesに移動して、ファイルを削除します。これで問題が解決することを願っています。 :)

0
S_J

これは、これらのソリューションのいずれも機能しなかった私のような貧しい人々のためのものです。新しいシングルビューアプリケーションでさえ、エラーなしでビルドしてもアーカイブに失敗します。

アーカイブの場所のパス(Xcode->設定->場所->アーカイブのパスで利用可能)に移動し、問題のある日のフォルダーを削除してください!

くそーりんご!

0
Dhilip

なぜなら、私はワークスペースで働いていたからです。プロジェクトはアーカイブされましたが、オーガナイザーウィンドウに表示されます。ワークスペースを閉じて、プロジェクトを単独で開きました。アーカイブはオーガナイザーで開かれています...助けになることを願っています。

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

0
miguelSantirso

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

User Header Search PathsHeader Search Pathsは同じようにエレガントに動作すると思います)を"$(BUILT_PRODUCTS_DIR)/BlocksKit"に変更しました。

背景

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

0
Mazyod

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

enter image description here

0
CoderPug

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

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

0
dexyjones

私の場合、2つのターゲット(Target1とTarget2)があり、そのうちの1つは「iOSアプリ」に、もう1つは「その他のアイテム」にのみアーカイブできました。したがって、この問題を解決するためのより速い方法は、次の手順でTarget2をTarget1のコピーに置き換えることでした。
1。 Target2の名前をTarget2_oldに変更します
2。 Target1のコピーを作成し、Target2に名前を変更します。
3。新しいTarget2の適切な.plistファイル(古いターゲットから)へのリンクを変更し、クラスの「Target Membership」をチェックします。
4。 「スキームの管理...」を開き、Target2_oldのスキームを削除してから、新しいTarget2の新しいスキームを追加します
5。この新しいスキームを選択し、製品->アーカイブを選択します

0
Pavel Kataykin

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

0
Maciej Swic

未定義の変数$(APP_PRODUCT_VERSION)でバージョンが定義されているアプリで私に起こりました

バージョンを定義し、iOSアプリを生成できました。

0
Fred

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

0
Inco Mob

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

0
Brian Stewart

同様の問題に遭遇しましたが、ポッドのないWatchKitアプリでした。 iOSアプリでは[スキップインストール]は正しく[いいえ]に設定されていましたが、WatchKitアプリでは[いいえ]に誤って設定されていました。

WatchKitアプリのスキップインストールをYESに変更(ただしiOSアプリではNOのまま)することで問題が修正され、Xcodeは汎用XcodeアーカイブではなくiOSアプリアーカイブを正しく生成しました。

0
StevenHolland

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

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

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

0
Ade Ward

私の場合、ターゲット名からアンダースコアを削除すると修正されました。

それが実際のアンダースコアなのか、名前の変更そのものなのかは定かではありません。

0
Mathijs