에러 잡기 1: 'ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64'

디버깅이 진짜 프로그래머 수명 깎아먹는 1등 공신.
하지만 프론트 (특히 iOS)는 평생을 환경설정과 에러에 맞서야 한다.

일단 오늘 뜬 에러는 agora_rtc_engine 패키지 때문이다.
pub get 까지는 잘됐는데 빌드에러가 자꾸 떴다.

ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64

별의 별짓을 다 하고 마지막에 고쳐졌다.
늘 그렇듯 알면 별거 아닌 문제다.


📍 문제 원인

일단 이 문제의 원인은 아래 블로그에 굉장히 잘 적혀있다.
https://jusung.github.io/Xcode12-Build-Error/

대충 설명하자면 시뮬레이터는 실제 아이폰의 CPU로 구현되는 것이 아니라 맥북 CPU를 그대로 따라간다
(20년도 맥북까지는 x86_64, 21년도 맥북부터는 arm64)

헌데 Xcode 12 부터 이 두가지 아키텍쳐를 모두 지원하는 정책을 사용했고 이 와중에 호환성 문제가 생겨서 시뮬레이터에 문제가 생긴다는 고런 느낌 (몰라~ ~~~)


📍 해결 방법

이것 저것 다 해보다가 된 거라서 정확히 어디가 필요한 부분이고 어디가 불필요한 부분인지 모른다.
일단 아래 있는 걸 순서대로 해보면서 필요 없는 스텝을 알아보자.

Step 1

프로젝트 > iOS > Runner.xcworkspace 를 xcode로 실행한 후 Runner > build Settings에 들어간다.
option에서 all을 킨 다음에, excluded architecture에 'arm64'를 다 적는다. (Project와 Target Runner 둘 다)

Step 2

현재 프로젝트에 있는 모든 build settings 를 확인 해가며 valid path를 지운다.
(위에 있는 문제 원인에 대한 포스트에 잘 설명되있다.)

⭐️ Step 3 (필수 스텝) ⭐️

이 스텝 뒤에 에러가 해결됐으니 필수 스텝이라고 확신할 수 있다.

일단 우리가 flutter run을 실행할 때마다 터미널에서 pod installing을 하는 걸 확인할 수 있는데, 이 때문인지 Xcode에서 pod의 excluded architecture를 아무리 바꿔줘도 적용이 안되는 것 같았다.
그래서 project_file > ios > Podfile 에 들어가서

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end

위 코드 처럼 돼있는 부분을 아래와 같이 바꿔야 한다.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |build_configuration|
      build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 i386'
    end
  end
end

Podfile을 바꿔주는 별의 별 방식을 인터넷에서 찾아볼 수 있지만, 적어도 나는 이것 말고는 아무 도움도 되지 않았다.
깃허브의 쓰레드를 하나 해보고 -> 다시 쓰레드 타고 -> 다시 해보고 -> 다시 쓰레드 타고... 반복했다.

어찌 됐든 시간이 아무리 오래 걸려도 에러를 해결한 사람이 이긴 사람이다

모두 즐코!


📍 수정!

테스트 프로젝트를 만들어서 위 '해결 방법'의 step 1, step 3만 해봤는데도 됐다.
step 2는 굳이 해주지 말자!

좋은 웹페이지 즐겨찾기