質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • Swift

    6511questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    3767questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Unity

    3416questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Unityでxcodeの設定自動化について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 230

Kw6ZG2sV

score 55

Unityから、Xcodeにビルドする際に、
buileSettingsの設定やframeworkの追加など
毎回毎回指定するのは面倒だなと感じ、
調べると良さそうなサイトがあり、こちらを参考にさせて頂いたのですが、
いざxcodeにビルドしようとした時にこのようなエラーログが出てビルド失敗します。
エラーは全部で4つ確認できます。
UnityのAssetにEditorというディレクトリを作成し、そこにサイトで言う所の、
XcodeSettingsPostProcesser.csとPBXのリンク先からダウンロードしたzipを
解凍したディレクトリを配置しています。
xcode.testというディレクトリはビルド以前に大量にエラーが表示されていたので、消しました。
どうすれば正常に動作するでしょうか??

ArgumentNullException: Argument cannot be null.
Parameter name: key
System.Collections.Generic.Dictionary`2[System.String,UnityEditor.iOS.Xcode.PBX.PBXBuildFileData].ContainsKey (System.String key) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:458)
UnityEditor.iOS.Xcode.PBXProjectData.BuildFilesGetForSourceFile (System.String targetGuid, System.String fileGuid) (at /Users/builduser/buildslave/unity/build/External/XcodeAPI/Xcode/PBXProjectData.cs:93)
UnityEditor.iOS.Xcode.PBXProject.BuildFilesGetForSourceFile (System.String targetGuid, System.String fileGuid) (at /Users/builduser/buildslave/unity/build/External/XcodeAPI/Xcode/PBXProject.cs:61)
UnityEditor.iOS.Xcode.PBXProject.GetCompileFlagsForFile (System.String targetGuid, System.String fileGuid) (at /Users/builduser/buildslave/unity/build/External/XcodeAPI/Xcode/PBXProject.cs:290)
XcodeSettingsPostProcesser.OnPostprocessBuild (BuildTarget buildTarget, System.String pathToBuiltProject) (at Assets/Editor/XcodeSettingsPostProcesser.cs:37)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
UnityEditor.Build.BuildPipelineInterfaces+AttributeCallbackWrapper.OnPostprocessBuild (BuildTarget target, System.String path) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:86)
UnityEditor.Build.BuildPipelineInterfaces.OnBuildPostProcess (BuildTarget platform, System.String path, Boolean strict) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:324)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Error building Player: ArgumentNullException: Argument cannot be null.
Parameter name: key
Build completed with a result of 'Failed'
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors
  at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x0020e] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:181 
  at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x00065] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:88 
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)


イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sakura_hana

    2018/03/12 11:09

    Unity、Xcode、OSのバージョンの記載をお願いします。

    キャンセル

  • Kw6ZG2sV

    2018/03/12 11:52 編集

    Xcode:Version 9.2 (9C40b) Unity: Version 2017.3.1f1 Personal Mac OS: Version 10.12.6 デバッグしたIOS :Version 11.2.6 以上でございます。

    キャンセル

回答 1

checkベストアンサー

0

ちょっと試せてませんが、
「PBXのリンク先からダウンロードしたzipを解凍したディレクトリ」
とやらが不要なのではないかと思います。
Unity5.6で同様のソースを使用していますが正常に動作しています。

また、ArgumentNullException: Argument cannot be null.なのでソースコードそのものに問題がある可能性があります。
使用しているコード(XcodeSettingsPostProcesser.cs)を提示頂くか、
内容を極力減らしてから徐々に追加していって、どの行で問題が起こっているかを探ってみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/13 10:16 編集

    私はこのように書きました。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEditor.Callbacks;
    using UnityEditor;
    using System.IO;
    using UnityEngine;
    using UnityEditor.iOS.Xcode;

    public class XcodeSettingsPostProcesser
    {
    [PostProcessBuildAttribute(0)]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject)
    {
    // iOS以外のプラットフォームは処理を行わない
    if (buildTarget != BuildTarget.iOS) return;

    // PBXProjectの初期化
    var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
    PBXProject pbxProject = new PBXProject();
    pbxProject.ReadFromFile(projectPath);
    string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone");

    // ここに自動化の処理を記述する

    // ビルド設定の追加
    pbxProject.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");

    // オプションフレームワークの追加
    pbxProject.AddFrameworkToProject(targetGuid, "AdSupport.framework", true);
    pbxProject.AddFrameworkToProject(targetGuid, "CoreLocation.framework", true);
    pbxProject.AddFrameworkToProject(targetGuid, "CoreTelephony.framework", true);
    pbxProject.AddFrameworkToProject(targetGuid, "libxml2.dylib", true);
    pbxProject.AddFrameworkToProject(targetGuid, "SystemConfiguration.framework", true);
    pbxProject.AddFrameworkToProject(targetGuid, "iAD.framework", true);



    // 設定を反映
    File.WriteAllText(projectPath, pbxProject.WriteToString());
    }
    }
    上記記載しております、解答したものがいらないのならば、このスクリプトファイルを作成してUnityのプロジェクトのAsset/Scripts配下に置くだけでbuildの自動化ができるのでしょうか?
    ちなみに私のエディタ上では
    using UnityEditor.iOS.Xcode;
    に赤の下線のエラー表示、
    PBXProject pbxProject = new PBXProject();
    にも同じくエラーが出ています。

    キャンセル

  • 2018/03/13 10:48

    Assets/Editorを作成して、その配下にcsファイルを置くことでエラーも消え、無事buildすることも出来、xcode上の設定も上手く出来ていました。自分の勘違いや、思い違いで少しミスをしていてこのようになったと思います。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    6511questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    3767questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Unity

    3416questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。