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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

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

Swift

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3866閲覧

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

po_tato

総合スコア97

Xcode

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

Swift

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2018/03/09 07:26

編集2018/03/12 01:03

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)

イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2018/03/12 02:09

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

2018/03/12 02:54 編集

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

回答1

0

ベストアンサー

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

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

投稿2018/03/13 00:45

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

po_tato

2018/03/13 01:20 編集

私はこのように書きました。 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(); にも同じくエラーが出ています。
po_tato

2018/03/13 01:48

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問