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

카테고리

분류 전체보기 (2738)
Unity3D (817)
Programming (475)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (53)
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
05-05 05:15

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
, |

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
, |

ITMS-90427을 처리하기 위해 확인해보니

Unity-iPhone의 Always Embed Swift Standard Libraries를 YES로 하고,

UnityFramework의 Always Embed Swift Standard Libraries를 NO로 하라고 한다.

 

빌드때마다 수동으로 하기는 그래서 Xcode PostProcessBuild로 처리하기로 함.

 

using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
 
namespace Editor
{
    public static class XcodeSwiftVersionPostProcess
    {
        [PostProcessBuild(999)]
        public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
        {
            if (buildTarget == BuildTarget.iOS)
            {
                ModifyFrameworks(path);
            }
        }
 
        private static void ModifyFrameworks(string path)
        {
            string projPath = PBXProject.GetPBXProjectPath(path);
           
            var project = new PBXProject();
            project.ReadFromFile(projPath);
 
            string mainTargetGuid = project.GetUnityMainTargetGuid();
           
            foreach (var targetGuid in new[] { mainTargetGuid, project.GetUnityFrameworkTargetGuid() })
            {
                project.SetBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
            }
           
            project.SetBuildProperty(mainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
 
            project.WriteToFile(projPath);
        }
    }
}

 

 

[출처] https://forum.unity.com/threads/2019-3-validation-on-upload-to-store-gives-unityframework-framework-contains-disallowed-file.751112/  - unity_Iu70XvRN7XIS4g의 댓글

 

2019.3 - validation on upload to store gives "UnityFramework.framework contains disallowed file"

App runs on phone normally. When trying to validate the app before uploading it to the store, this comes out: Invalid Bundle. The bundle at...

forum.unity.com

 

반응형
Posted by blueasa
, |

found a solution here https://forum.unity.com/threads/2019-3-validation-on-upload-to-store-gives-unityframework-framework-contains-disallowed-file.751112/ specifically from reply #38 from a user called Melnikovv

 

[In XCode]
Set yes on Always Embed Swift Standard Libraries in target Unity-iPhone in Build Settings.
Set no on Always Embed Swift Standard Libraries in target UnityFramework in Build Settings.

 

This worked for me.

I also had another issue with Unity In App Purchasing that required me to downgrade to version 3.1.0. I think that is an unrelated issue but I'm putting it here just in case.
Hope this helps someone

 

 

[출처] https://github.com/googleads/googleads-mobile-unity/issues/2126

 

Admob 7.1.0 - iOS - ITMS-90427: Invalid Swift Support - The expected dylibs are missing · Issue #2126 · googleads/googleads-mo

Environment: Unity version: 2020.3.36f1 Google Mobile Ads Unity plugin version: 7.1.0 Platform: iOS Platform OS version: 15+ Mediation ad networks used, and their versions: -> AdColony 2.6.0 -&g...

github.com

 


 

りん より:

と、思ったのですが、アップロードの過程でリジェクトされていました。

”ITMS-90427: Invalid Swift Support – The expected dylibs are missing from the app’s Framework location, such as /Payload/●●●.app/Frameworks.”とメールが来てました。

どこか設定がわるかったのかもしれません。

結局、Always Embed Swift Standard Librariesの項目を、Unity-iPhone、Unity-iPhoneTest、UnityFrameworkの全てで、”No”にしたところ、全てアップロードまでスムーズに通りました。

[출처] https://nobushiueshi.com/unity%E3%80%8Cerror-itms-90206%E3%80%8D%E3%81%8C%E5%87%BA%E3%81%A6appstore%E3%81%B8%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%8C%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A7/

 

[Unity]「ERROR ITMS-90206」が出てAppStoreへバイナリがアップロードできなくなったお話

はじめに先日UnityでビルドしたiOSのアプリをバージョンアップの為にAppStoreへ新しいバイナリをアップロードしたらエラーが出たので、その時の状況と対応方法を紹介しようと思います。環境

nobushiueshi.com

 

반응형
Posted by blueasa
, |

[추가]

이 이슈는 ITMS-90427: Invalid Swift Support 연장선인 것 같다.

그래서 ITMS-90427을 처리하면 ITMS-90206은 처리 안해도 되는걸로 보인다.

 

처리 방법은 위 링크에도 있지만 아래와 같다.

 

[In XCode]
Set yes on Always Embed Swift Standard Libraries in target Unity-iPhone in Build Settings.
Set no on Always Embed Swift Standard Libraries in target UnityFramework in Build Settings.

 

--------------------------------------------------------------------------------------------------------------------------------

 

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'OOO.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'."


유니티 프레임워크 에러다!


Xcode 아카이브 이후 Upload시 나타나는 문제..
해결 방법은 간단하다.


1. 아카이브한 버전 우클릭
2. Show in Finder
3. 뭐 하나 있는데 그거 우클릭!
4. 패키지 내용 보기
4. Products 폴더 이동
5. Applications 폴더 이동
6. 앱 이름으로 된거 우클릭
7. 패키지 내용 보기
8. Frameworks 폴더 이동
9. UnityFramework.framework 폴더 이동
10. Frameworks 폴더 자체 삭제!!


이후 Upload시 해당 에러가 나타나지 않는다!!
<끝>

 

 

[출처] https://velog.io/@ymsection/Xcode-UnityFramework-Error

 

Xcode - UnityFramework Error:)

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'OOO.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'."유니티 프레임워크 에러다!Xc

velog.io

반응형
Posted by blueasa
, |

[요약] Accelerate.framework 추가하자

 

[링크] https://minmong.tistory.com/242

 

페이스북 sdk 빌드 에러 iOS Facebook SDK Static Framework build error

지난 번에 Facebook 심사를 위한 앱검수 얘기를 했었는데요. 페이스북 권한을 사용하는 컨텐츠를 동영상으로 촬영해야 된다고 말씀드렸습니다. 그리고 iOS의 경우는 시뮬레이터 빌드를 준비해야

minmong.tistory.com

 

반응형
Posted by blueasa
, |

[에러 내용]

  • 기기에서 앱을 실행하면 'dyld: Library not loaded: @rpath/FBAudienceNetwork.framework' 오류와 함께 바로 중단됩니다. 이 오류는 앱에 Audience Network SDK를 포함하지 않았다는 것을 의미합니다. 타겟 설정으로 이동하고 '일반' 탭에서 'FBAudienceNetwork.xcframework'에 '포함 및 서명'을 선택하세요.

 

[해결방법]

출처 링크의 내용에서는 Xcode에서 처리하는 방법을 써놨는데, 유니티 사용하는 상황에서 추가 작업을 Xcode에서 하면 귀찮아져서 Xcode PostProcessor에서 아래 소스 추가함.

[추가한 소스코드] pbxProject.AddFrameworkToProject(targetGuid, "FBAudienceNetwork.framework", true);

 

 

[출처] https://developers.facebook.com/docs/audience-network/setting-up/platform-setup/ios/add-sdk?locale=ko_KR

 

SDK 추가 - Audience Network - 문서 - Facebook for Developers

SDK 버전 6.9.0 이상에 대한 문제 해결 6.9.0부터는 iOS Audience Network SDK에서 Swift를 지원합니다. SDK 설치 및 Swift 상호운용성과 관련하여 가장 일반적으로 발생하는 문제를 해결하려면 아래의 내용을

developers.facebook.com

 

반응형
Posted by blueasa
, |

Unity 2018.4.36f1

Xcode 13.4.1

 

[Error Message]

[Attribution] updatePostbackConversionValue returned error: 작업을 완료할 수 없습니다.(SKANErrorDomain 오류 10.).

 

 

iOS 빌드하고 실행에 별다른 문제는 없지만 위와 같은 에러가 떠서 뭔가하고 찾아봤는데,

Apple 측 답변으로는 에러메시지는 뜨지만 정상 동작하고 있다는 것 같다.

무시..

 

[참조]

Got an answer from Apple:

There has been an issue identified starting iOS 15.3, where the view through APIs may return an "unknown error", in cases when no error has actually occurred. In 15.3 that error is ASDErrorDomain:500. In 15.4 that error is now defined in the public SDK as SKANErrorDomain:SKANErrorUnknown (value 10). However, in those cases no functional error has actually occurred. The impression was recorded by the system.

We recommend that you ignore all errors of type ASDErrorDomain:500 / SKANErrorDomain:SKANErrorUnknown (value 10), as they are not real errors. The impression is recorded on the device regardless of those errors.

 

[출처] https://developer.apple.com/forums/thread/699442

 

SKAdImpression unknown 500 error | Apple Developer Forums

In iOS 15.3 method SKAdNetwork.startImpression() returns an error in completionHandler: MyTestApp(StoreKit)[560] : SKAdNetwork: Error in remote proxy while starting view-through impression: Error Domain=ASDErrorDomain Code=500 "SKAdNetwork: Unknown error"

developer.apple.com

 

반응형
Posted by blueasa
, |

[링크] https://hwangtaehyun.github.io/blog/react-native/ios-cycle-dependency-error/

 

Cycle in dependencies between targets ...

# ❎ 에러 발생 react-native project에서 ios프로젝트를 빌드 하다가 다음과 같은 에러를 만나게 되었다. > Cycle in dependencies between targets ... 왜 갑자기..? (나중에 생각해보니, 나도 모르게 뭔가 안되는

hwangtaehyun.github.io

 

반응형
Posted by blueasa
, |

[링크] https://violentjy.tistory.com/95

 

[iOS Archive] conflicting provisioning settings 어쩌구

아!!!!!!!!!!!!! 넘 화난당!!!!!!!!!!!!!!!!!!! TestFlight 연동을 해야하는데, App store 에 build 올리는 거에 대해 정리된 문서를 보다가 영어 문장을 너무 대충 읽어서 "니 앱이 적절한 Bundle ID를 가지고..

violentjy.tistory.com

 

[링크] https://phillip5094.github.io/ios/unity/Unity-iPhone-has-conflicting-provisioning-settings-%ED%95%B4%EA%B2%B0/

 

Unity-iPhone has conflicting provisioning settings 해결방법

2020.05.30

phillip5094.github.io

 

 

 

반응형
Posted by blueasa
, |