블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Unity 2021.3.14f1

현재(2022-12-11) 기준 Xcode PostProcessBuild 파일

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

namespace blueasa
{
    public class XcodeSettingsPostProcessor
    {

#if UNITY_2019_3_OR_NEWER
        // FixPodFile 사용법 참조
        // https://github.com/googlesamples/unity-jar-resolver/issues/405 : Str4tos 댓글
        [PostProcessBuild(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
        private static void FixPodFile(BuildTarget buildTarget, string buildPath)
        {
            /// Stop processing if target is NOT iOS
            if (buildTarget != BuildTarget.iOS)
                return;

            using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
            {
                // [Error 대응] (Xcode 14): Signing for "GoogleSignIn-GoogleSignIn" requires a development team.
                // [해결방법 참조] https://github.com/CocoaPods/CocoaPods/issues/11402 : JosephPoplar 댓글
                sw.WriteLine("\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    if target.respond_to?(:product_type) and target.product_type == \"com.apple.product-type.bundle\"\n      target.build_configurations.each do |config|\n        config.build_settings['CODE_SIGN_IDENTITY'] = \"\"\n        #prevent resource bundle from reading image nil\n        config.build_settings.delete('PRODUCT_BUNDLE_IDENTIFIER')\n      end\n    end\n  end\nend");

                /// ex
                //sw.WriteLine("\ntarget 'Unity-iPhone' do\nend");
            }
        }
#endif

        [PostProcessBuild]
        public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject)
        {

            /// Stop processing if target is NOT iOS
            if (buildTarget != BuildTarget.iOS)
                return;

            /// Initialize PbxProject
            var projectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
            //var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
            PBXProject pbxProject = new PBXProject();
            pbxProject.ReadFromFile(projectPath);
            // Unity 2019 대응[blueasa / 2020-12-22]
#if UNITY_2019_3_OR_NEWER
            //string targetGuid = pbxProject.GetUnityFrameworkTargetGuid();
            string strMainTargetGuid = pbxProject.GetUnityMainTargetGuid();
            string strFrameworkTargetGuid = pbxProject.GetUnityFrameworkTargetGuid();
#else
            string strMainTargetGuid = pbxProject.TargetGuidByName("Unity-iPhone");
#endif

            /// Sample of adding build property
            //pbxProject.AddBuildProperty(strMainTargetGuid, "OTHER_LDFLAGS", "-all_load");

            /// Sample of setting build property
            //pbxProject.SetBuildProperty(strMainTargetGuid, "ENABLE_BITCODE", "NO");
            //pbxProject.SetBuildProperty(strMainTargetGuid, "EMBEDDED_CONTENT_CONTAINS_SWIFT", "YES");
            //pbxProject.SetBuildProperty(strMainTargetGuid, "CODE_SIGNING_ALLOWED", "NO");

            /// Sample of update build property
            //pbxProject.UpdateBuildProperty(strMainTargetGuid, "OTHER_LDFLAGS", new string[] { "-ObjC" }, new string[] { "-weak_framework" });

            /// ITMS-90206. ITMS-90427 에러 대응[blueasa / 2022-11-17]
            // Set FrameworkTargetGuid : NO
            foreach (var targetGuid in new[] { strMainTargetGuid, pbxProject.GetUnityFrameworkTargetGuid() })
            {
                pbxProject.SetBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
            }
            // Set MainTargetGuid : YES
            pbxProject.SetBuildProperty(strMainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");

            // [에러 처리] Undefined symbol: _vDSP_vclip, _vDSP_vsadd, _vvexpf, _vDSP_sve, _vdsp_mmul, _vDSP_maxv, _vDSP__dotpr, vDSP_vsdiv
            pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "Accelerate.framework", true);

            /// Sample of adding REQUIRED framwrok
            // Facebook SDK
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "FBAEMKit.framework", true);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "FBSDKCoreKit.framework", true);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "FBSDKCoreKit_Basics.framework", true);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "FBSDKLoginKit.framework", true);

            // Facebook Audience Network
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "FBAudienceNetwork.framework", true);

            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "CoreData.framework", false);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "Security.framework", false);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "CoreData.framework", false);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "libsqlite3.0.tbd", false);
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "AdSupport.framework", false); // for AppsFlyer
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "iAd.framework", false);       // for AppsFlyer

            /// Sample of adding OPTIONAL framework
            //pbxProject.AddFrameworkToProject(strFrameworkTargetGuid, "SafariServices.framework", true);

            /// Sample of setting compile flags
            //var guid = pbxProject.FindFileGuidByProjectPath("Classes/UI/Keyboard.mm");
            //var flags = pbxProject.GetCompileFlagsForFile(strMainTargetGuid, guid);
            //flags.Add("-fno-objc-arc");
            //pbxProject.SetCompileFlagsForFile(strMainTargetGuid, guid, flags);

#if !UNITY_2019_3_OR_NEWER
            // Add push notifications as a capability on the target
            pbxProject.AddCapability(targetGuid, UnityEditor.iOS.Xcode.PBXCapabilityType.PushNotifications);
#endif
            // Apply settings
            File.WriteAllText(projectPath, pbxProject.WriteToString());

#if UNITY_2019_3_OR_NEWER
            // 필요한 Capability 추가
            ProjectCapabilityManager projCapability = new ProjectCapabilityManager(projectPath, "Unity-iPhone/mmk.entitlements", "Unity-iPhone");
            projCapability.AddPushNotifications(false);		// Push Notifications
            projCapability.AddInAppPurchase();				// IAP
            projCapability.AddSignInWithApple();    		// Apple 로그인(FirebaseAuth용)
            projCapability.WriteToFile();
#endif
            /////////////////////////////////////////////////////////////////////////////////

            /// Samlpe of editing Info.plist
            var plistPath = System.IO.Path.Combine(pathToBuiltProject, "Info.plist");
            var plist = new PlistDocument();
            plist.ReadFromFile(plistPath);

            /// Add string integer
            //plist.root.SetInteger("FYBVideoPlayerOptionCloseButtonDelay", -1);  // Fyber

            /// Add boolean setting
            plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);  // 수출 규정 관련 문서가 누락됨 경고 메세지 대처법
            plist.root.SetBoolean("FacebookAutoLogAppEventsEnabled", false);  // Facebook 자동 로그인 비활성화
            //plist.root.SetBoolean("FIREBASE_ANALYTICS_COLLECTION_ENABLED", true);  // FA

            /// Add string setting
            // [Fix] Unity2020.3.26f1에서 수정됨[blueasa / 2022-01-18]
            // [iOS15 + Unity2020.3.22f1 이슈] Force Dark Mode(Automatic/Light/Dark) - Appearance
            // [참조] https://stackoverflow.com/questions/70239569/unity-shader-glitches-according-to-the-dark-mode-on-ios-15
            //plist.root.SetString("UIUserInterfaceStyle", "Dark");

            // [iOS15+] AppsFlyer - SKAdNetwork 포스트백 적용[blueasa / 2022-02-17]
            plist.root.SetString("NSAdvertisingAttributionReportEndpoint", "https://appsflyer-skadnetwork.com/");

            /// Privacy
            //plist.root.SetString("NSCalendarsUsageDescription", "Some ad content may access calendar");
            //plist.root.SetString("NSCameraUsageDescription", "Every play requires access to the Camera library");
            plist.root.SetString("NSPhotoLibraryUsageDescription", "Every play requires access to the photo library"); // ITMS-90683
            // for Bluetooth [blueasa/2020-04-28]
            //plist.root.SetString("NSBluetoothAlwaysUsageDescription", "App would like to use your bluetooth for communication purposes");
            //plist.root.SetString("NSBluetoothPeripheralUsageDescription", "App would like to use your bluetooth for communication purposes");

            #region SKAdNetwork IDs
            // SKAdNetwork IDs integration(for iOS14+)
            // https://blueasa.tistory.com/2482
            var arraySKAdNetworkItems = plist.root.CreateArray("SKAdNetworkItems");
            // for Admob(Google)
            // https://developers.google.com/admob/ios/ios14#skadnetwork
            var dictSKAdNetworkIdentifier_Admob = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Admob.SetString("SKAdNetworkIdentifier", "cstr6suwn9.skadnetwork"); // Admob
            // for FAN
            // https://developers.facebook.com/docs/audience-network/guides/SKAdNetwork
            var dictSKAdNetworkIdentifier_FAN_1 = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_FAN_1.SetString("SKAdNetworkIdentifier", "v9wttpbfk9.skadnetwork"); // FAN 1
            var dictSKAdNetworkIdentifier_FAN_2 = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_FAN_2.SetString("SKAdNetworkIdentifier", "n38lu8286q.skadnetwork"); // FAN 2
            // for UnityAds
            // https://unityads.unity3d.com/help/ios/skadnetwork-ids?fbclid=IwAR3T6BWG6-SIdWipZaB-PEtUQhg1DAnU_kQ22iiSv4Z5Q6nItq2edtpIIkM
            // https://skan.mz.unity3d.com/v2/partner/skadnetworks.plist.xml?_ga=2.140049011.1591405619.1607905486-1813266944.1603773122
            var dictSKAdNetworkIdentifier_Unity_1 = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Unity_1.SetString("SKAdNetworkIdentifier", "4DZT52R2T5.skadnetwork"); // Unity Technologies 1
            var dictSKAdNetworkIdentifier_Unity_2 = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Unity_2.SetString("SKAdNetworkIdentifier", "bvpn9ufa9b.skadnetwork"); // Unity Technologies 2
            var dictSKAdNetworkIdentifier_Mintegral = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Mintegral.SetString("SKAdNetworkIdentifier", "KBD757YWX3.skadnetwork"); // Mintegral
            var dictSKAdNetworkIdentifier_CriteoSA = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_CriteoSA.SetString("SKAdNetworkIdentifier", "9RD848Q2BZ.skadnetwork"); // Criteo SA (Manage.com)
            var dictSKAdNetworkIdentifier_mkhoj = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_mkhoj.SetString("SKAdNetworkIdentifier", "WZMMZ9FP6W.skadnetwork"); // mkhoj Solutions Private Limited
            var dictSKAdNetworkIdentifier_Snap = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Snap.SetString("SKAdNetworkIdentifier", "424M5254LK.skadnetwork"); // Snap Inc.
            var dictSKAdNetworkIdentifier_Cheetah = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Cheetah.SetString("SKAdNetworkIdentifier", "24t9a8vw3c.skadnetwork"); // Cheetah Medialink
            var dictSKAdNetworkIdentifier_Appier = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Appier.SetString("SKAdNetworkIdentifier", "v72qych5uu.skadnetwork"); // Appier Inc.
            var dictSKAdNetworkIdentifier_Liftoff = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Liftoff.SetString("SKAdNetworkIdentifier", "7UG5ZH24HU.skadnetwork"); // Liftoff Mobile, Inc.
            var dictSKAdNetworkIdentifier_Beeswax = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Beeswax.SetString("SKAdNetworkIdentifier", "c6k4g5qg8m.skadnetwork"); // Beeswax
            var dictSKAdNetworkIdentifier_Adikteev = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Adikteev.SetString("SKAdNetworkIdentifier", "ydx93a7ass.skadnetwork"); // Adikteev SA
            var dictSKAdNetworkIdentifier_Realtime = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Realtime.SetString("SKAdNetworkIdentifier", "4468km3ulz.skadnetwork"); // Realtime Technologies GmbH
            var dictSKAdNetworkIdentifier_Remerge = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Remerge.SetString("SKAdNetworkIdentifier", "2U9PT9HC89.skadnetwork"); // Remerge GmbH
            var dictSKAdNetworkIdentifier_CriteoCorp = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_CriteoCorp.SetString("SKAdNetworkIdentifier", "hs6bdukanm.skadnetwork"); // Criteo Corp
            var dictSKAdNetworkIdentifier_Aarki = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Aarki.SetString("SKAdNetworkIdentifier", "4FZDC2EVR5.skadnetwork"); // Aarki, Inc.
            //var dictSKAdNetworkIdentifier_Google = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Google.SetString("SKAdNetworkIdentifier", "cstr6suwn9.skadnetwork"); // Google LLC(Admob)
            var dictSKAdNetworkIdentifier_YouAppi = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_YouAppi.SetString("SKAdNetworkIdentifier", "3RD42EKR43.skadnetwork"); // YouAppi Inc
            var dictSKAdNetworkIdentifier_LifeStreet = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_LifeStreet.SetString("SKAdNetworkIdentifier", "t38b2kh725.skadnetwork"); // LifeStreet Corporation
            var dictSKAdNetworkIdentifier_SPOTAD = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_SPOTAD.SetString("SKAdNetworkIdentifier", "f73kdq92p3.skadnetwork"); // SPOTAD LTD
            var dictSKAdNetworkIdentifier_BYTEMOD_Global = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_BYTEMOD_Global.SetString("SKAdNetworkIdentifier", "22mmun2rn5.skadnetwork"); // BYTEMOD PTE. LTD-global
            var dictSKAdNetworkIdentifier_DATASEAT = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_DATASEAT.SetString("SKAdNetworkIdentifier", "M8DBW4SV7C.skadnetwork"); // DATASEAT LTD
            var dictSKAdNetworkIdentifier_Kidoz = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Kidoz.SetString("SKAdNetworkIdentifier", "v79kvwwj4g.skadnetwork"); // Kidoz Ltd.
            var dictSKAdNetworkIdentifier_Sabio = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Sabio.SetString("SKAdNetworkIdentifier", "GLQZH8VGBY.skadnetwork"); // Sabio Mobile Inc.
            var dictSKAdNetworkIdentifier_Moloco = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Moloco.SetString("SKAdNetworkIdentifier", "9T245VHMPL.skadnetwork"); // Moloco, Inc
            var dictSKAdNetworkIdentifier_Bidmachine = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Bidmachine.SetString("SKAdNetworkIdentifier", "wg4vff78zm.skadnetwork"); // Bidmachine
            var dictSKAdNetworkIdentifier_BYTEMOD_CN = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_BYTEMOD_CN.SetString("SKAdNetworkIdentifier", "238da6jt44.skadnetwork"); // BYTEMOD PTE. LTD-CN
            var dictSKAdNetworkIdentifier_Apptimus = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Apptimus.SetString("SKAdNetworkIdentifier", "lr83yxwka7.skadnetwork"); // Apptimus LTD
            var dictSKAdNetworkIdentifier_Centro = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Centro.SetString("SKAdNetworkIdentifier", "3sh42y64q3.skadnetwork"); // Centro Inc.
            var dictSKAdNetworkIdentifier_UNICORN = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_UNICORN.SetString("SKAdNetworkIdentifier", "578prtvx9j.skadnetwork"); // UNICORN Inc.
            var dictSKAdNetworkIdentifier_REVX = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_REVX.SetString("SKAdNetworkIdentifier", "5a6flpkh64.skadnetwork"); // REVX TECHNOLOGY PRIVATE LIMITED
            var dictSKAdNetworkIdentifier_RTBHouse = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_RTBHouse.SetString("SKAdNetworkIdentifier", "8s468mfl3y.skadnetwork"); // RTBHouse Pte LTD
            var dictSKAdNetworkIdentifier_CrossInstall = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_CrossInstall.SetString("SKAdNetworkIdentifier", "prcb7njmu6.skadnetwork"); // CrossInstall
            var dictSKAdNetworkIdentifier_Maiden = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Maiden.SetString("SKAdNetworkIdentifier", "zmvfpc5aq8.skadnetwork"); // Maiden Marketing Pvt Ltd.
            var dictSKAdNetworkIdentifier_AdColony = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_AdColony.SetString("SKAdNetworkIdentifier", "4PFYVQ9L8R.skadnetwork"); // AdColony, Inc.
            var dictSKAdNetworkIdentifier_Spyke = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Spyke.SetString("SKAdNetworkIdentifier", "44n7hlldy6.skadnetwork"); // Spyke Media GmbH
            var dictSKAdNetworkIdentifier_LoopMe = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_LoopMe.SetString("SKAdNetworkIdentifier", "5lm9lj6jb7.skadnetwork"); // LoopMe Ltd
            var dictSKAdNetworkIdentifier_Smadex = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Smadex.SetString("SKAdNetworkIdentifier", "ppxm28t8ap.skadnetwork"); // Smadex SL
            var dictSKAdNetworkIdentifier_ADTIMING = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_ADTIMING.SetString("SKAdNetworkIdentifier", "488r3q3dtq.skadnetwork"); // ADTIMING TECHNOLOGY PTE. LTD.
            var dictSKAdNetworkIdentifier_Jampp = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Jampp.SetString("SKAdNetworkIdentifier", "YCLNXRL5PM.skadnetwork"); // Jampp LTD
            var dictSKAdNetworkIdentifier_PubNative = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_PubNative.SetString("SKAdNetworkIdentifier", "TL55SBB4FM.skadnetwork"); // PubNative GMBH
            var dictSKAdNetworkIdentifier_Chartboost = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Chartboost.SetString("SKAdNetworkIdentifier", "F38H382JLK.skadnetwork"); // Chartboost, Inc.
            var dictSKAdNetworkIdentifier_ScaleMonk = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_ScaleMonk.SetString("SKAdNetworkIdentifier", "av6w8kgt66.skadnetwork"); // ScaleMonk Inc.
            var dictSKAdNetworkIdentifier_Persona = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Persona.SetString("SKAdNetworkIdentifier", "44jx6755aq.skadnetwork"); // Persona.ly LTD
            var dictSKAdNetworkIdentifier_Triapodi = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Triapodi.SetString("SKAdNetworkIdentifier", "mlmmfzh3r3.skadnetwork"); // Triapodi Ltd.
            // for Vungle
            // https://support.vungle.com/hc/en-us/articles/360002925791-Integrate-Vungle-SDK-for-iOS#3-add-the-%E2%80%9C-objc%E2%80%9D-linker-flag-0-9
            // https://vungle.com/skadnetworkids.xml
            var dictSKAdNetworkIdentifier_Vungle = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_Vungle.SetString("SKAdNetworkIdentifier", "GTA9LK7P23.skadnetwork"); // Vungle
            //var dictSKAdNetworkIdentifier_Adikteev = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Adikteev.SetString("SKAdNetworkIdentifier", "ydx93a7ass.skadnetwork"); // Adikteev  
            //var dictSKAdNetworkIdentifier_Aarki = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Aarki.SetString("SKAdNetworkIdentifier", "4FZDC2EVR5.skadnetwork"); // Aarki
            //var dictSKAdNetworkIdentifier_AdColony = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_AdColony.SetString("SKAdNetworkIdentifier", "4PFYVQ9L8R.skadnetwork"); // AdColony
            //var dictSKAdNetworkIdentifier_Appier = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Appier.SetString("SKAdNetworkIdentifier", "v72qych5uu.skadnetwork"); // Appier
            //var dictSKAdNetworkIdentifier_Appreciate = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Appreciate.SetString("SKAdNetworkIdentifier", "mlmmfzh3r3.skadnetwork"); // Appreciate
            //var dictSKAdNetworkIdentifier_Beeswax = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Beeswax.SetString("SKAdNetworkIdentifier", "c6k4g5qg8m.skadnetwork"); // Beeswax
            //var dictSKAdNetworkIdentifier_Jampp = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Jampp.SetString("SKAdNetworkIdentifier", "YCLNXRL5PM.skadnetwork"); // Jampp
            //var dictSKAdNetworkIdentifier_LoopMe = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_LoopMe.SetString("SKAdNetworkIdentifier", "5lm9lj6jb7.skadnetwork"); // LoopMe
            var dictSKAdNetworkIdentifier_MyTarget = arraySKAdNetworkItems.AddDict();
            dictSKAdNetworkIdentifier_MyTarget.SetString("SKAdNetworkIdentifier", "n9x2a789qt.skadnetwork"); // MyTarget
            //var dictSKAdNetworkIdentifier_Pubnative = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Pubnative.SetString("SKAdNetworkIdentifier", "TL55SBB4FM.skadnetwork"); // Pubnative
            //var dictSKAdNetworkIdentifier_Remerge = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Remerge.SetString("SKAdNetworkIdentifier", "2U9PT9HC89.skadnetwork"); // Remerge
            //var dictSKAdNetworkIdentifier_RTBHouse = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_RTBHouse.SetString("SKAdNetworkIdentifier", "8s468mfl3y.skadnetwork"); // RTB House
            //var dictSKAdNetworkIdentifier_Sabio = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Sabio.SetString("SKAdNetworkIdentifier", "GLQZH8VGBY.skadnetwork"); // Sabio
            //var dictSKAdNetworkIdentifier_Webeye = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_Webeye.SetString("SKAdNetworkIdentifier", "22mmun2rn5.skadnetwork"); // Webeye
            //var dictSKAdNetworkIdentifier_YouAppi = arraySKAdNetworkItems.AddDict();
            //dictSKAdNetworkIdentifier_YouAppi.SetString("SKAdNetworkIdentifier", "3RD42EKR43.skadnetwork"); // YouAppi
#endregion

            /// Add URL Scheme
            //var array = plist.root.CreateArray("CFBundleURLTypes");
            //var urlDict = array.AddDict();
            //urlDict.SetString("CFBundleURLName", "hogehogeName");
            //var urlInnerArray = urlDict.CreateArray("CFBundleURLSchemes");
            //urlInnerArray.AddString("hogehogeValue");

            /// Localizations [blueasa / 2018-03-28]
            // need Language Code(ref:https://ko.wikipedia.org/wiki/ISO_639)
            var arrayLocalizations = plist.root.CreateArray("CFBundleLocalizations");
            arrayLocalizations.AddString("en");         // 영어
            arrayLocalizations.AddString("ko");         // 한국어
            
            // [Temp] 사용전까지 주석처리[blueasa / 2022-11-16]
            //arrayLocalizations.AddString("zh_CN");      // 중국어(간체) : 중국
            //arrayLocalizations.AddString("zh_TW");      // 중국어(번체) : 대만
            //arrayLocalizations.AddString("ja");         // 일본어
            //arrayLocalizations.AddString("vi");         // 베트남어
            //arrayLocalizations.AddString("es");         // 스페인어
            //arrayLocalizations.AddString("it");         // 이탈리아어
            //arrayLocalizations.AddString("id");         // 인도네시아어
            //arrayLocalizations.AddString("th");         // 태국어
            //arrayLocalizations.AddString("pt");         // 포르투갈어
            //arrayLocalizations.AddString("hi");         // 힌디어


            //arrayLocalizations.AddString("de");       // 독일어
            //arrayLocalizations.AddString("zh");       // 중국어

            /// Apply editing settings to Info.plist
            plist.WriteToFile(plistPath);

        }
    }
}
반응형
Posted by blueasa
, |

Unity2020.3.40f1

Xcode 14.1

 

Xcode 14로 업데이트 후, iOS 빌드 하면 제목과 같은 에러가 발생한다.

 

- 관련 에러 위치 찾아가서 Team Id를 선택하면 잘되긴 하는데, 빌드때마다 수동으로 하기는 애매해서 찾아보니 PodFile에 아래 내용을 추가하면 된다고 한다.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
      target.build_configurations.each do |config|
        config.build_settings['CODE_SIGN_IDENTITY'] = ""
        #prevent resource bundle from reading image nil
        config.build_settings.delete('PRODUCT_BUNDLE_IDENTIFIER')
      end
    end
  end
end

[출처] https://github.com/CocoaPods/CocoaPods/issues/11402 : JosephPoplar 댓글

 

Xcode 14 build failed with manual code sign and app resource bundles · Issue #11402 · CocoaPods/CocoaPods

I've read and understood the CONTRIBUTING guidelines and have done my best effort to follow. Report What did you do? Integrate a pod with resource bundle. Set app code sign style to Manual. Bui...

github.com

 

 

- iOS 빌드해서 PodFile 수작업을 계속할 수는 없는지라  Unity의 Xcode PostProcessBuild에서 자동으로 추가하도록 함.

(Define을 봐서는 Unity2019.3 이상에서만 가능한 것 같다)

#if UNITY_2019_3_OR_NEWER
        // FixPodFile 사용법 참조
        // https://github.com/googlesamples/unity-jar-resolver/issues/405 : Str4tos 댓글
        [PostProcessBuild(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
        private static void FixPodFile(BuildTarget buildTarget, string buildPath)
        {
            /// Stop processing if target is NOT iOS
            if (buildTarget != BuildTarget.iOS)
                return;

            using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
            {
                // [Error 대응] (Xcode 14): Signing for "GoogleSignIn-GoogleSignIn" requires a development team.
                // [해결방법 참조] https://github.com/CocoaPods/CocoaPods/issues/11402 : JosephPoplar 댓글
                sw.WriteLine("\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    if target.respond_to?(:product_type) and target.product_type == \"com.apple.product-type.bundle\"\n      target.build_configurations.each do |config|\n        config.build_settings['CODE_SIGN_IDENTITY'] = \"\"\n        #prevent resource bundle from reading image nil\n        config.build_settings.delete('PRODUCT_BUNDLE_IDENTIFIER')\n      end\n    end\n  end\nend");

                /// ex
                //sw.WriteLine("\ntarget 'Unity-iPhone' do\nend");
            }
        }
#endif

[출처] https://github.com/googlesamples/unity-jar-resolver/issues/405 : Str4tos 댓글

 

iOS Unity 2019.4 and UnityFramework pod target error · Issue #405 · googlesamples/unity-jar-resolver

[REQUIRED] Please fill in the following fields: Unity editor version: 2019.4.11f1, 2020.1.7f1 External Dependency Manager version: v1.2.159 Source you installed EDM4U: Unity Package Manager Feature...

github.com

 

반응형
Posted by blueasa
, |

PostProcessBuild에 아래처럼 FixPodFile()을 추가하고,

원하는 내용을 줄바꿈(\n) 포함해서 WriteLine에 string 형태로 추가한다.

 

#if UNITY_2019_3_OR_NEWER
  [PostProcessBuild( 45 )]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
  private static void FixPodFile( BuildTarget target, string buildPath )
  {
      using (StreamWriter sw = File.AppendText( buildPath + "/Podfile" ))
      {
          sw.WriteLine( "\ntarget 'Unity-iPhone' do\nend" );
      }
  }
#endif

 

[출처] https://github.com/googlesamples/unity-jar-resolver/issues/405

 

iOS Unity 2019.4 and UnityFramework pod target error · Issue #405 · googlesamples/unity-jar-resolver

[REQUIRED] Please fill in the following fields: Unity editor version: 2019.4.11f1, 2020.1.7f1 External Dependency Manager version: v1.2.159 Source you installed EDM4U: Unity Package Manager Feature...

github.com

 

[참조] https://github.com/AdColony/AdColony-Unity-Plugin/blob/master/Plugin/Assets/AdColony/Editor/ADCPostBuildProcessor.cs

 

GitHub - AdColony/AdColony-Unity-Plugin: AdColony SDK Open Source Unity Plugin

AdColony SDK Open Source Unity Plugin . Contribute to AdColony/AdColony-Unity-Plugin development by creating an account on GitHub.

github.com

 

반응형
Posted by blueasa
, |