본문 바로가기
게임 개발/유니티

[유니티 iOS 빌드] 유니티에서 Plist파일 관리하기

by 티토로 2023. 6. 21.

아래 소스의 파일은 Assets/Editor 밑에 넣어야 함

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;

// PListiOS - Edit the PList file.

public class PListiOS 
{
#if UNITY_CLOUD_BUILD
// This method is added in the Advanced Features Settings on UCB
// PostBuildProcessor.OnPostprocessBuildiOS
public static void OnPostprocessBuildiOS (string exportPath)
{
Debug.Log("[UCB] OnPostprocessBuildiOS");
ProcessPostBuild(BuildTarget.iPhone,exportPath);
}
#endif

[PostProcessBuild(999)]
public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
{
#if !UNITY_CLOUD_BUILD
Debug.Log ("[iOS] OnPostprocessBuild");
ProcessPostBuild (buildTarget, path);
#endif
}

public static void ProcessPostBuild(BuildTarget buildTarget, string path) 
{
#if UNITY_IOS

        if (buildTarget == BuildTarget.iOS) {
// Bitcode Disable
string projectPath = PBXProject.GetPBXProjectPath(path);

PBXProject pbxProject = new PBXProject();
pbxProject.ReadFromFile(projectPath);
#if UNITY_2019_3_OR_NEWER
var targetGuid = pbxProject.GetUnityMainTargetGuid();
#else
                var targetName = PBXProject.GetUnityTargetName();
                var targetGuid = pbxProject.TargetGuidByName(targetName);
#endif
pbxProject.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");
pbxProject.WriteToFile(projectPath);

var projectInString = File.ReadAllText(projectPath);

projectInString = projectInString.Replace("ENABLE_BITCODE = YES;",
$"ENABLE_BITCODE = NO;");   // 비트 코드를 노로 해야 빌드가 됨
File.WriteAllText(projectPath, projectInString);


// Plist
Debug.Log ("[iOS] OnPostprocessBuild - PList");

// Get plist
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));

// Get root
PlistElementDict rootDict = plist.root;

// Change value of CFBundleVersion in Xcode plist
//var buildKey = "UIBackgroundModes"; 
//rootDict.CreateArray (buildKey).AddString ("remote-notification"); // 노티 관련이라 주석처리 함

// 수출입 문서
            rootDict.SetBoolean("ITSAppUsesNonExemptEncryption", false);  // 테스트 플라이트에 앱 올린 후 자동으로 배포 되지 않고 한번씩 눌러줘야 했지만 이값을 넣으면 파일이 업로드가 끝나고 시간이 지나면 자동으로 배포 됨

rootDict.SetString("CFBundleDisplayName", "XXXX");   // 테스트 플라이트에 앱 올렸더니 번들명이 없다고 나와서 넣어 줌 ( 다국어 한 뒤 생김 )
rootDict.SetString("CFBundleName", "com.XXXX.XXXX"); // 위와 마찬가지

// ATS  // AdColony라는 광고에서 오류가 있어서 넣어 줌
PlistElementDict NSAppTransportSecurity = rootDict.CreateDict("NSAppTransportSecurity");  
NSAppTransportSecurity.SetBoolean("NSAllowsArbitraryLoads", true);  

// Write to file
File.WriteAllText(plistPath, plist.WriteToString());

}

#endif
}
}

반응형