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

박건희·2022년 1월 6일
2

Flutter

목록 보기
2/4

디버깅이 진짜 프로그래머 수명 깎아먹는 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는 굳이 해주지 말자!

profile
CJ ENM iOS 주니어 개발자

0개의 댓글