[Mac] 유니티 스크립트로 Xcode 설정하기
728x90
반응형
이용목적
- XcodeAPI를 이용하여 빌드 후 Xcode 설정을 자동화하기 위해서 사용한다.
자동화 항목
- 빌드 설정 편집
- 프레임 워크의 추가
- 컴파일 플래그의 설정
- info.plist 설정
PostProcessBuild(N)
- 빌드 후 호출되는 콜백 함수
- 유니티 내에 있는 특정파일(ex.특정 정보를 외부에서 수정할 수 있도록 빼놓은 데이터 텍스트)을 빌드 후에도 사라지지 않도록 한다.
- 0이 내부에서 쓰이는 order이므로 1 이상을 지정한다.
※ 이 스크립트 파일은 macOS에 설치된 유니티 에디터를 통해 실행되므로 반드시 Editor 폴더 아래에 두어야 한다.
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public static class XcodeOption
{
[PostProcessBuild(999)]
public static void OnPostProcessBuild( BuildTarget buildTarget, string path)
{
if(buildTarget == BuildTarget.iOS)
{
string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject pbxProject = new PBXProject();
pbxProject.ReadFromFile(projectPath);
string target = pbxProject.TargetGuidByName("Unity-iPhone");
#region [ProvisioningStyle]
//!< 빌드 설정 추가
pbxProject.AddBuildProperty (targetGuid, "OTHER_LDFLAGS" , "-all_load" );
pbxProject.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
//!< 빌드 설정 편집, 제 3 인수는 추가 설정 제 4 인수는 삭제 설정
pbxProject.UpdateBuildProperty (targetGuid, "OTHER_LDFLAGS" , new string [] { "-ObjC" }, new string [] { "- weak_framework " });
#endregion
#region [Framework]
pbxProject.AddFrameworkToProject( targetGuid, "AuthenticationServices.framework", false );
#endregion
#region [Add Resources]
//!< localizeList
Dictionary<string, string> folders = new Dictionary<string, string>();
List<string> localizeList = new List<string>();
localizeList.Add( "Base.lproj" );
localizeList.Add( "ko.lproj" );
localizeList.Add( "zh-Hant.lproj" );
localizeList.Add( "en.lproj" );
foreach( string data in localizeList )
{
if( !Directory.Exists( "./BuildOutput/XCode" + "/" + data ) )
Directory.CreateDirectory( "./BuildOutput/XCode" + "/" + data );
if( CopyFile( "InfoPlist.strings", "./BuildOutput/iOS_Localize/" + data, "./BuildOutput/XCode/" + data ) )
folders.Add( data, "./" );
}
foreach( KeyValuePair<string, string> folder in folders )
{
string guid = pbxProject.AddFolderReference( folder.Value + folder.Key, folder.Key, PBXSourceTree.Source );
pbxProject.AddFileToBuild( targetGuid, guid );
}
Dictionary<string, string> files = new Dictionary<string, string>();
if( CopyFile( "GoogleService-Info.plist", "./BuildOutput/GoogleServicePlist", "./BuildOutput/XCode" ) )
files.Add( "GoogleService-Info.plist", "./" );
foreach( KeyValuePair<string, string> file in files )
{
string guid = pbxProject.AddFile( file.Value + file.Key, file.Key, PBXSourceTree.Source );
pbxProject.AddFileToBuild( targetGuid, guid );
}
#endregion
#region [Modify PList]
string infoPlistPath = path + "/Info.plist";
//string infoPlistPath = Path.Combine( path, "Info.plist" ); //!< 위와 동일
PlistDocument plistDoc = new PlistDocument();
plistDoc.ReadFromFile( infoPlistPath );
//plistDoc.ReadFromString( File.ReadAllText( infoPlistPath ) ); //!< 위와 동일
PlistElementDict plistDic = plistDoc.root;
if ( plistDic != null)
{
plistDic.SetBoolean("ITSAppUsesNonExemptEncryption", false);
plistDic.SetString("CFBundleDisplayName", "MY APP NAME");
}
//!< UIApplicationExitsOnSuspend 제거
var dic = plistDic.values;
dic.Remove( "UIApplicationExitsOnSuspend" );
plistDoc.WriteToFile(infoPlistPath);
#endregion
//!< [Apply modified configuration]
pbxProject.WriteToFile (projectPath);
#region [Capabilities]
ProjectCapabilityManager capabilityManager = new ProjectCapabilityManager( projectPath, "name.entitlements", PBXProject.GetUnityTargetName() );
//!< GameCenter
capabilityManager.AddGameCenter();
//!< Push
capabilityManager.AddPushNotifications( true );
//!< In App Purchase
capabilityManager.AddInAppPurchase();
//!< Sign In with Apple
AppSignInWithApple( capabilityManager );
capabilityManager.WriteToFile();
#endregion
}
}
}
728x90
반응형
'OS > MacOS' 카테고리의 다른 글
[Mac] XCode에서 dSYM(디버그 심볼) Symbolicate 하는법 (0) | 2020.11.04 |
---|---|
[Mac] SVN 및 SvnX 설치 (0) | 2020.08.25 |
[Mac] Homebrew와 Cask 설치 및 사용법 (0) | 2020.08.24 |
댓글
이 글 공유하기
다른 글
-
[Mac] XCode에서 dSYM(디버그 심볼) Symbolicate 하는법
[Mac] XCode에서 dSYM(디버그 심볼) Symbolicate 하는법
2020.11.04 -
[Mac] SVN 및 SvnX 설치
[Mac] SVN 및 SvnX 설치
2020.08.25 -
[Mac] Homebrew와 Cask 설치 및 사용법
[Mac] Homebrew와 Cask 설치 및 사용법
2020.08.24