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

카테고리

분류 전체보기 (2797)
Unity3D (853)
Script (91)
Extensions (16)
Effect (3)
NGUI (81)
UGUI (9)
Physics (2)
Shader (37)
Math (1)
Design Pattern (2)
Xml (1)
Tips (201)
Link (23)
World (1)
AssetBundle (25)
Mecanim (2)
Plugins (79)
Trouble Shooting (70)
Encrypt (7)
LightMap (4)
Shadow (4)
Editor (12)
Crash Report (3)
Utility (9)
UnityVS (2)
Facebook SDK (2)
iTween (3)
Font (13)
Ad (14)
Photon (2)
IAP (1)
Google (8)
Android (51)
iOS (44)
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

MacOS 14.5

Unity 2021.3.40f1

Firebase 12.1.0

----

 

유니티 에디터에서 Play를 하려는데 아래와 같은 에러가 뜬다.

 

찾아보니 Mac 설정에서 체크해줘야 된다.

[설정 - 개인정보 보호 및 보안]에서 아래 빨간 네모박스 부분을 찾아서 [그래도 허용]을 눌러주자.

 

 

 

[참조] https://moongtaeng.net/wp/2022/01/02/4049/

 

Unity FirebaseCppApp-xxx.bundle 오류 – 뭉탱이의 까칠한 생활

신년을 맞이하여 구닥다리 프로젝트를 다시 오픈해서 각종 sdk 업데이트를 진행하였다. synology에 svn이 없어졌기에 git으로 갈아타고 각종 설정을 진행하는데, 유니티에서 갑작스레 오류팝업을 띄

moongtaeng.net

 

[참조] https://firebase.google.com/docs/unity/build-debug-guide?hl=ko

 

게임 빌드, 설치, 실행 프로세스 디버깅  |  Firebase for Unity

의견 보내기 게임 빌드, 설치, 실행 프로세스 디버깅 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소개 다음은 Unity용 Firebase SDK를 사용하여 Unity 게임의 컴

firebase.google.com

 

반응형
Posted by blueasa
, |

[링크] https://velog.io/@sun02/iOS-Info.plist-%EB%AC%B8%EA%B5%AC-localization

 

[iOS] - Info.plist의 문구 localization

앱 내의 문구를 Localization 할 때와 방법은 거의 동일합니다.New file > Strings File 이때 파일 명을 'InfoPlist' 로 지정해주어야합니다.InfoPlist.strings 파일이 생성되면 Localize를 눌러 현지화할 언어를 선택

velog.io

 

반응형
Posted by blueasa
, |

[링크] https://zeddios.tistory.com/369

 

iOS ) 왕초보를 위한 로컬라이징 / Info.plist

안녕하세요 :) Zedd입니다.방금전에 < 왕초보를 위한 로컬라이징 > 글을 썼는데 이것도 알아두면 좋을 것 같아서 ㅎㅁㅎ이번엔 Info.plist를 로컬라이징 해봅시다.엥;;;뭔솔;;; 자...우리 뭐 연락처에

zeddios.tistory.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.36f1

Xcode 15.3

----

 

[결론] 

Privacy Manifest 관련 대응 버전은 Unity 2023.2.13, 2022.3.21, 2021.3.36 이라고 한다.(메이저 버전별 해당 버전이후로 업데이트 필요)

위에 적힌 버전 이상 설치 돼 있으면, iOS 빌드를 할 때 알아서 PrivacyInfo.xcprivacy를 생성해 준다고 한다.

Unity 2021.3.36f1으로 iOS 빌드했는데, PrivacyInfo.xcprivacy도 추가돼있고, 내용도 제대로 들어있는 걸 확인했다.(필요한 거 확인해서 알아서 넣어준다고 어디선가 적힌걸 본 것 같은데..)

Unity 2021.3.36f1으로 iOS 빌드하면 PrivacyInfo.xcprivacy가 자동 생성된다.

 

쉽게 해결하려면 엔진 버전업 하자.

 

SDK 등 Third Party 플러그인들은 해당 Third Party에서 업데이트 대응해줘야 되는거니 내가 뭔가 할 건 없는 것 같다.

 

P.s. 

수동으로 작업하려면 'PolicyInfo.xcprivacy' 파일을 생성해서 수정하고, '../Assets/Plugins' 폴더에 파일을 넣어두면 된다고 한다.

자동으로 추가되는 정보 외에 별도로 추가하고 싶으면 파일을 해당 위치에 넣어두자.

 

[참조] https://forum.unity.com/threads/apple-privacy-manifest-updates-for-unity-engine.1529026/

 

Official - Apple privacy manifest updates for Unity Engine

Introduction At WWDC 2023 Apple announced a number of additions to its privacy program, including the introduction of Privacy Manifests. Since then,...

forum.unity.com

 

----

[링크1] [Unity] Apple Privacy Manifest 대응

 

[Unity] Apple Privacy Manifest 대응

안녕하세요. Apple이 공개한 Privacy Manifest를 반드시 포함해야 하는 SDK 목록 중에 UnityFramework가 있었고 이번에 Unity에서 공식적인 입장과 가이드를 공개했어요. https://forum.unity.com/threads/apple-privacy-man

phillip5094.tistory.com

 

[링크2] 개인정보 보호 매니페스트 및 서명을 필요로 하는 SDK

 

개인정보 보호 매니페스트 및 서명을 필요로 하는 SDK

안녕하세요. 이전에 Privacy manifest에 대해서 공부했는데요. [WWDC23] Get started with privacy manifests 안녕하세요. 이번엔 WWDC23 'Get started with privacy manifests' 세션을 보고 내용 정리해 볼게요. #개요 앱 사용

phillip5094.tistory.com

 

 

[참조] 【Xcode/iOS】Privacy Manifests에 대응하는 방법! PrivacyInfo.xcprivacy란?

 

Webエンジニア学習部屋

駆け出しwebエンジニアのあめの学習記録webサイトです。WordPressなどのCMSを使わずに自分でHTMLファイルやphpファイルを作成しサーバーにアップしています。プログラミングで悩んだポイントや

appdev-room.com

반응형
Posted by blueasa
, |

Unity 2021.3.35f1

GoogleMobileAds 8.7.0

----

 

 

GDPR 동의 로직 추가하고 iOS 검수 넣었더니 리젝 됐다.

사유는 대충 정리하면,

GDPR 팝업에서 '거부'를 했는데, 같은 이슈인 'IDFA(AppTrackingTransparency)' 동의 여부를 다시 묻는 건 문제다.

라는 말이었습니다.

 

이전엔 GoogleMobileAds에서 제대로 처리안해줘서 같은 이슈 (아래 링크 참고) 가 있었던 것 같은데, 현재 최신 버전에서는 수정된걸로 보인다.

[참고] https://groups.google.com/g/google-admob-ads-sdk/c/huUa7eyMTEE

 

URGENT: Apple App Rejected - UMP SDK Using both GDPR & IDFA/ATT Causing Rejection

Hi Justin, thank you for the update and for your work to get this resolved! Unfortunately, the "short term recommendation" provided would be a significant ad revenue impact, and so it is not viable. We do need to call requestConsentInfoUpdate to get the I

groups.google.com

 

아무튼,

나의 경우는 GDPR은 GoogleMobileAds를 사용하고, IDFA 관련은 다른 SDK에서 처리하고 있어서 유기적으로 제어되지 않고 있었다.

 

GoogleMobileAds-UMP를 확인해보니,

IDFA(App Tracking Transparency) 관련 처리도 GoogleMobileAds에서 같이해주면 GDPR과 IDFA(ATT) 동의를 알아서 유기적으로 처리해준다.

 

GDPR 로직을 추가하고, IDFA 관련 Admob 설정을 추가(소스 로직 추가는 없음)하고, 테스트 해보니 아래와 같은 형태로 진행된다.

(로직상으로는 GDPR 관련 체크 로직만 있다. GDPR 체크 후에 필요하면 IDFA 로직을 알아서 타는 것 같다.)

 

GDPR 관련 설정은 아래 링크를 참고하자.

[링크] [GoogleMobileAds] Unity-Google-UMP-Check(GDPR)

 

[GoogleMobileAds] Unity-Google-UMP-Check(GDPR)

2024년 1월 16일까지(참조:https://support.google.com/admob/answer/14189727?hl=ko) Admob을 사용하려면 유저에게 GDPR 동의를 받으라고 하는 것 같다. 그래서 Google에서 관련 SDK를 내놓은게 UMP(User Messaging Platform) SDK

blueasa.tistory.com

 

[GDPR/IDFA 활성화 시, 진행 Flow]

1) EEA(European Economic Area, 유럽 경제 지역)

    1-1) GDPR 팝업 Open

            1-1-1) GDPR 동의 시 -> ATT 동의 팝업 Open

            1-1-2) GDPR 비동의 시 -> ATT 동의 팝업 Skip(뜨지 않음)

 

2) Non-EEA(Non-European Economic Area, '유럽 경제 지역' 외 지역)

    2-1) IDFA 메시지 (안내) 팝업 Open

    2-2) ATT(App Tracking Transparency) 동의 팝업 Open

 

애플 검수 과정에서 요구하는 사항인 GDPR을 거부했을 때, IDFA 동의 팝업이 뜨지 않아야 된다는 조건에 만족하고 있다.

 

[결론]

GoogleMobileAds-UMP로 GDPR과 IDFA를 처리하면 심플하게 유기적으로 처리 가능하다.

적극 활용하자.

 

 

[참조] https://docs.adxcorp.kr/appendix/ump-user-messaging-platform#2.-idfa

 

UMP (User Messaging Platform) - ADX Library

IDFA 메시지 작성은 선택사항이지만, GDPR 메시지 사용 설정을 할 경우, IDFA 메시지 작성도 같이 작성하십시오. 애드몹 UMP의 GDPR 동의 화면이 보이는 상태에서, 프로그래밍 방식으로 수동으로 ATT (AP

docs.adxcorp.kr

[참조] https://docs.adxcorp.kr/ios/supporting-ios-14/app-tracking-transparency

 

App Tracking Transparency - ADX Library

애드몹 UMP (User Messaging Platform)의 IDFA 메시지 기능 활성화 시, 특별한 프로그래밍 코딩을 하지 않아도, UMP 내부에서 자동으로 ATT 동의 알림 요청 기능을 수행하므로, 이 단계(Step4)와 다음 단계 (Step

docs.adxcorp.kr

반응형
Posted by blueasa
, |

Xcode 15

Unity 2023.3.10f1

----

 

[Xcode Build Error]

Assertion failed: (false && "compact unwind compressed function offset doesn't fit in 24 bits"), function operator(), file Layout.cpp, line 5758.

 

Xcode 15로 업데이트 후 빌드를 했더니,

유니티 빌드는 정상적으로 됐는데 Xcode로 넘어와서는 위와 같은 에러를 내면서 빌드가 안된다.

혹시나해서 Mac OS 14로 업데이트도 해봤는데 빌드 실패함.

 

OTHER_LDFLAGS에 -ld_classic을 추가하라는 내용을 보고(아래 링크 참조) 추가해서 정상적으로 빌드 되는 것을 확인 함.

 

    ...
    var pbxProject = new PBXProject();
    pbxProject.ReadFromFile(projectPath);
 
    //Unity Framework
    target = pbxProject.GetUnityFrameworkTargetGuid();
    pbxProject.AddBuildProperty(target, "OTHER_LDFLAGS", "-ld_classic");

 

 

[참조] https://forum.unity.com/threads/project-wont-build-using-xode15-release-candidate.1491761/#post-9355667

 

Bug - Project won't build using Xode15 release candidate.

Hi there, just tried to build the project using Xcode15 RC (Released yesterday). And failed with the following error: Showing Recent Issues...

forum.unity.com

[참조] https://issuetracker.unity3d.com/issues/building-projects-with-il2cpp-scripting-backend-for-apple-platforms-fails-with-xcode-15-dot-0b6-or-newer

 

Unity IssueTracker - Building projects with IL2CPP scripting backend for Apple platforms fails with Xcode 15.0b6 or newer

Xcode >= 15.0b6 contains a change to the "ProductName" in the "version.plist", which Unity will fail to parse. Because of that, U...

issuetracker.unity3d.com

 

 

반응형
Posted by blueasa
, |

[Crash 내용]

com.apple.root.default-qos SIGABRT ABORT 0x00000001e01bf4c4

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

 

오랜만에 iOS 빌드하는 프로젝트에서 빌드는 잘되는데 실행하니 일부 아이폰에서 위와 같은 크래시레포트를 뱉으면서 앱이 죽는다.

찾아보니 권한을 사용하려는데 Privacy Description이 없어서 죽는 것 같다.

이번에 내 경우는 NSUserTrackingUsageDescription 였는데,

어떤 Privacy Description이 없어서 크래시가 나는지는 본인이 체크하고 추가해줘야 될 것 같다.

 

 

[참조]

https://walkthinksleep.tistory.com/entry/Crashed-comapplerootdefaultqos-%EC%9D%B4%EC%8A%88

 

iOS, Crashed: com.apple.root.default-qos 이슈

crashed 1 times in __TCCAccessRequest_block_invoke.85! 라고 연락(?)이 왔고,Crashed: com.apple.root.default-qos 라고 Fabric이 얘기해줬다. 구글링을 해보면 주로 privacy에 관련된 내용이 생길때 나타나는 에러 같았다.

walkthinksleep.tistory.com

 

반응형
Posted by blueasa
, |

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

[추가]

Unity의 VideoPlayer iOS는 H264/H265를 지원안한다고 한다.

VP8(.webm) 쓰자..

 

 

So the problem was, H264 and H265 Codecs are not supported for some reasons in IOS, You have to convert all your videos to VP8 Codec in unity, and it will render fine in ios devices. 

And Voila, it should work fine now.

 

 

[출처] https://stackoverflow.com/questions/65978459/unityengine-videoplayer-not-rendering-video-on-ios-devices

 

UnityEngine.Videoplayer not rendering video on IOS Devices

I am using unity's video player to render a video in the scene, I spawn the video in the scene dynamically, (Render Mode: Camera Far Plane) Let it play on awake And Assign its texture on to a raw

stackoverflow.com

 

반응형
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
, |