디버깅이 진짜 프로그래머 수명 깎아먹는 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 부터 이 두가지 아키텍쳐를 모두 지원하는 정책을 사용했고 이 와중에 호환성 문제가 생겨서 시뮬레이터에 문제가 생긴다는 고런 느낌 (몰라~ ~~~)
이것 저것 다 해보다가 된 거라서 정확히 어디가 필요한 부분이고 어디가 불필요한 부분인지 모른다.
일단 아래 있는 걸 순서대로 해보면서 필요 없는 스텝을 알아보자.
프로젝트 > iOS > Runner.xcworkspace 를 xcode로 실행한 후 Runner > build Settings에 들어간다.
option에서 all을 킨 다음에, excluded architecture에 'arm64'를 다 적는다. (Project와 Target Runner 둘 다)
현재 프로젝트에 있는 모든 build settings 를 확인 해가며 valid path를 지운다.
(위에 있는 문제 원인에 대한 포스트에 잘 설명되있다.)
이 스텝 뒤에 에러가 해결됐으니 필수 스텝이라고 확신할 수 있다.
일단 우리가 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는 굳이 해주지 말자!