본문 바로가기
Achaive

Unity, XCode15 업데이트 이후 빌드 애러

by Client. DJ 2024. 4. 3.
반응형

인트로

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

 

위와 같은 애러 전문이 있는 경우는 스크린샷과 같이 타겟 중에서 UnityFramework 선택 후, [Build Settings] -> Linking - General -> Other Linker Flags에서 "+"를 누르고 "-ld64"를 추가하면 된다고 합니다. (정확히는 LD64)

 

하지만 저같이 젠킨스 등을 통해 빌드 파이프 라인을 이용하여 유니티 빌드부터 XCode 빌드까지 자동화 되어있는 경우는 일일이 추가할 수가 없습니다.

 

그렇기에 빌드 프로세스 중에 "-ld64"를 자동으로 추가하는 코드가 필요합니다.

스크립트

"Editor" 폴더를 만들어, 폴더 안에 스크립트를 추가해줍니다.

LD64LinkSetting.cs

//#define UNITY_IOS
using System.IO;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif

public class LD64LinkSetting : MonoBehaviour
{
#if UNITY_IOS
    [PostProcessBuild(10)]
    public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
    {
        if (target != BuildTarget.iOS) return;

        string projectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
        Debug.Log("[projectPath] " + projectPath);
        PBXProject project = new PBXProject();
        project.ReadFromString(File.ReadAllText(projectPath));
#if UNITY_2019_4_OR_NEWER
        string targetGUID = project.GetUnityFrameworkTargetGuid();
#else
        string targetName = PBXProject.GetUnityTargetName(); // note, not "project." ...
        string targetGUID = project.TargetGuidByName(targetName);
#endif
        // Add `-ld64` to "Other Linker Flags".
        project.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-ld64");

        // Write.
        File.WriteAllText(projectPath, project.WriteToString());
    }
#endif
}
#endif

위의 코드를 추가하면, 자동으로 XCode 프로젝트에서 "-ld64"가 추가됩니다.

마무리

저와 같은 어려움이 있는 분들께 좋은 정보가 되길 바랍니다.


참고: https://forums.developer.apple.com/forums/thread/735426

반응형

댓글