Flutter

[Flutter] Xcode 16 업데이트 대응

devyong 2024. 9. 30. 22:55

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에서 지원하는것이 아니라, 수정을 기다릴 수가 없다.

메소드채널을 이용한 네이티브 구현 예정이다.