[Flutter] Xcode 16 업데이트 대응
macOS Sequoia 업데이트에 따라 Xcode16 버전 업데이트가 진행되었다.
Flutter에서도 빌드, 런타임, 배포간 에러가 발생했으며, 수정 방법을 간락히 요약하고자한다.
1. Bitcode 비활성화
Xcode 16에서부터는 Bitcode 비활성화가 필요했다.
대부분의 솔루션에서 Build Settings - ENABLE_BITCODE = NO 를 하면된다고하지만, 외부 라이브러리에게는 다른 방법이 필요했다.
나에게 발생한 에러는 이것이다.
Asset validation failed Invalid Executable. The executable 'Runner.app/Frameworks/NaverThirdPartyLogin.framework/NaverThirdPartyLogin' contains bitcode.
NaverThirdPartyLogin의 Bitcode 비활성화가 필요했으며, 예시는 다음과 같다.
podfile를 변경해야한다.
post_install do |installer|
bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
framework_path = File.join(Dir.pwd, framework_relative_path)
command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
puts "Stripping bitcode: #{command}"
system(command)
end
Dir.glob('Pods/**/NaverThirdPartyLogin.framework').each do |framework|
framework_executable = File.basename(framework, ".framework")
framework_relative_path = File.join(framework, framework_executable)
strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
end
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
빌드단계에서 해당 프레임워크의 Bitcode를 제거한다.
프로젝트에 발생한 에러명을 파악 후 적용하면될것이다.
하지만 우선 외부라이브러리라면, 최신버전에서 적용이되어있을 수 있으니 가장 최신버전을 먼저 파악하는게 좋을 것 같다.
2. InAppWebView의 빌드에러

6.1.0 InAppWebView를 사용중이였다.
지금 당시 6.1.3버전까지 출시가 되어 있지만, min Dart SDK에 걸려서 아직 버전을 올릴 수 가 없었다.
따라서 6.1.0버전을 사용하면서 빌드에러를 수정해야했다.
pubspec.yaml - dependency_overrides 아래 다음을 추가하여 해결했다.
flutter_inappwebview_ios:
git:
url: https://github.com/andychucs/flutter_inappwebview.git
ref: master
path: flutter_inappwebview_ios
ios inappwebview를 master브런치것으로 오버라이드하는 것처럼 느껴진다.
빌드 후 웹뷰 페이지들을 확인 했을때, 현재까지 특이사항은 없어보인다.
Xcode 16부터는
3. 'UIApplication' does not conform to protocol 'Launcher' Xcode 16
외부앱/브라우저 처리를 위해 사용중이던 'url_launcher' 패키지에서 발생했다.
해결 : 'url_launcher_ios 6.3.1을 수동설치했다.
------
다음부터는 런타임간 발생했다. 네이버로그인 함수에서 해당 에러메시지가 노출됐다. (기능동작도 하지않음)
BUG IN CLIENT OF UIKIT: The caller of UIApplication.openURL(😃 needs to migrate to the non-deprecated UIApplication.open(:options:completionHandler:). Force returning false (NO).
UIApplication.open 가 deprecated된것으로 파악된다.
네이버로그인으로 https://pub.dev/packages/flutter_naver_login 를 사용중이다.
1.8.0버전에서 더 이상 업데이트가 이루어지지 않고있는데,
네이티브(swift)에서는 공식적으로 수정이 됐지만 해당 외부라이브러리는 naver에서 지원하는것이 아니라, 수정을 기다릴 수가 없다.
메소드채널을 이용한 네이티브 구현 예정이다.