Mac OS 세쿼이아 업그레이드 했다. Xcode 16으로 업그레이드 했다.

별다른 이슈가 없는 듯 했는데, iOS 빌드 후 testflight 업로드 하려니 이슈가 발생하였다.

*** Error: [ContentDelivery.Uploader.600000068240] Asset validation failed (90482) Invalid Executable. The executable 'Runner.app/Frameworks/AdFitSDK.framework/AdFitSDK' contains bitcode.

target build 버전 등의 차이로 인한 듯 한데. adFit SDK 쪽에서 처리해줘야 하나? 따로 직접 해결할 수 있나?

예전 비슷한 이슈인가? 다른 이슈? https://devtalk.kakao.com/t/appstore-minimum-os-version/135747

 

[AppStore] 테스트플라이트 아카이브 안됨(minimum OS Version 관련)

문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요. 현재 사용 SDK 버전 - 2.21 제가 현재 엑스코드에서 테스트플라이트를 위해 아카이브를 했는데 아래와 같은 에러가 계속 뜹니

devtalk.kakao.com

메시지는 동일한 것은 아닌데, 빌드시 버전 이슈를 본것 같아서 일단 정리.

다른 정확한 해결책을 찾아보는 중.

관련이슈 2 - https://developer.apple.com/forums/thread/764576

 

Invalid Executable. The excecutabl… | Apple Developer Forums

After upgrading to XCode 16, while uploading apps to app store, it's throwing below error and not letting me upload it. It's iOS app. Please help. Invalid Executable. The excecutable ......app/Frameworks/hermes.framework/hermes contains bitcode.

developer.apple.com

역시나 SDK 쪽에서 지원해줘야 하나...

 

[해결책] bitcode 에러 조치 - Xcode 16

관련이슈 3 - https://medium.com/@hyosing92/ios-bitcode%EC%99%80-%EA%B4%80%EB%A0%A8-issue-4643dc841af7

 

[iOS]Bitcode와 관련 Issue

Bitcode 관련 이슈와 왜 deprecate되었을지

medium.com

위 글 내용상 - 직접 bitcode 를 제거해줘야 하는 듯 하다.

ios/Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == 'AdFitSDK'
      `xcrun --sdk iphoneos bitcode_strip -r Pods/AdFitSDK/Frameworks/AdFitSDK.framework/AdFitSDK -o Pods/AdFitSDK/Frameworks/AdFitSDK.framework/AdFitSDK`
    end

  end
end

본인의 코드중 에러나는 위치를 확인한다. 내 경우는 아래 경로.

Pods/AdFitSDK/Frameworks/AdFitSDK.framework/AdFitSDK

(SDK 종류마다 해당 위치가 차이가 난다 - Pods 에서 해당 경로 확인)

실제 동작은 체크해봐야겠다. Xcode > Product > archive 로 확인해보니

에러 메시지는 사라졌다. 아래의 경고메시지가 거슬르긴 하지만, testflight 로 업로드는 된다.

실제 내부테스트 배포가 되는지 체크해봐야 겠다. (위 경고 메시지 제거방법은 따로 체크)

...

내부테스트 정상 배포되었다. - 일단 긴급 이슈는 해결

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

플러터 앱 - 안드로이드 쪽 자동배포를 해봤는데, 이번에는 iOS 쪽도 해본다.

testFlight 로 업로드 하는 코드.

# IPA 파일 생성
flutter build ipa --release --export-options-plist=ios/exportOptions.plist

# TestFlight에 업로드 
xcrun altool --upload-app --type ios \
 --file build/ios/ipa/*.ipa \
 --username "{your-apple-develper-id}" \
 --password "{your-app-password}" \
 --primary-bundle-id "{your-app-bundle-id}"

코드 자체는 심플하다. 관련 인증 부분이 좀 어려울 수 있다.

일단 앱 암호는 https://appleid.apple.com/account/manage 애플 계정쪽에서 설정한다.

그외 다른 인증 방식으로 몇가지 시도해봤는데, 유일하게 위 방법만 동작하였다.
( --apiKey --apiIssuer 방법 , --upload-package 방법 , xcrun notarytool 방법 => 모두 실패 )
위 다른 방식들이 좀더 안전(?)한 방법인 듯 해서 시도해봤었는데, 실패.

 

다음 부분에서도 좀 헤맸다.

# cat ios/exportOptions.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>destination</key>
    <string>export</string>
    <key>method</key>
    <string>app-store</string>
    <key>teamID</key>
    <string>{your-developer-team-ID}</string>
    <key>teamName</key>
    <string>{your-developer-team-Name}</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>{your-app-bundle-id}</key>
        <string>{your-project-provisioning-profile}</string>
    </dict>
    <key>signingCertificate</key>
    <string>Apple Distribution</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>

위 입력사항 중 2개 teamName / bundle id 는 금방 찾았고 , 그외 2가지 항목을 찾아야 한다.

teamID / provisioning profile 은 어디?

open ios/Runner.xcworkspace 
# 플러터 프로젝트를 Xcode 를 열어본다.

Runner 쪽을 보면 Signing 부분에 있다. ( 지금 살펴보니, 모든 항목이 다 여기에 있다. )

내 경우는 계정소유자가 아니라 (앱 관리자? )권한으로 참여하는 것이라 Signing Certificate 쪽 설정하는데 고생을 좀 했다.

위 설정까지 문제없이 했다면, 맨 위 코드로 빌드 => 배포 가 정상적으로 될 것이다.

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

플러터로 앱을 만들고 있다.

광고연동을 하고 있는데, 애드몹은 무난하게 넘어갔다.

다음에는 앱로빈(Applovin) 을 연동중에 있는데, 안드로이드 쪽도 좀 힘든 부분이 있었지만, 해결은 하였다.

그런데, iOS 쪽을 연동하는 중에 이상한 부분이 있어서 기록을 남긴다.

[현상]

플러터 코드를 동일하게 하고, 앱로빈쪽의 Ad Unit 을 iOS 용으로 만들고 구동해보니
다른 광고는 정상인데, native 만 나오지 않는다.( banner , mrec , Interstitial 등은 잘 나온다)

[조치1]

AppLovinMAX.setVerboseLogging(true);

AppLovinMAX.initialize 초기화 시에 옵션 추가

해당 설정을 추가하면 자세한 로그를 볼 수 있다. 그런데, android 에서는 잘 나오는데, ios 쪽에서는 나오지 않는다.

[조치2]

AppLovinMAX.showMediationDebugger();

다른 디버거 옵션을 넣어본다. 광고 동작등을 체크해볼 수 있다.
여기서는 native 광고도 잘 나온다. 뭔가 설정의 문제일 듯 하다. 범위가 좁혀졌다.

혹시나 해서.

위치 ios/Runner.xcodeproj/project.pbxproj

....
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
    "$(inherited)",
    "@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.userAppName;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
....

해당 bundle id 를 ad unit 과 맞춰준다.

PRODUCT_BUNDLE_IDENTIFIER = com.example.userAppName;

AppLovin 의 광고 유닛 - 동일하게 맞춰준다.

테스트 용이라 임의로 입력했었다.(안드로이드에서 정상동작해서 신경쓰지 않았었다.)

디버거에도 해당 View Ad Units 부분에 나온다(기존에는 나오지 않았다. 0 )

 

저렇게 bundle id 를 동일하게 맞춰주니 정상동작 한다.

[해결]

android 는 모두 상관없고, iOS 는 native 만 체크하는 듯 하다.

정식 앱이면, 자연스럽게 bundle id 가 맞게 입력했을텐데, 테스트용으로 임의로 넣다보니 그런 현상이 발생했다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

아이폰 무선 디버깅을 해보고 있다.

요약하면

1. 아이폰 맥북/맥미니 등에 연결
2. xcode 실행 => 메뉴 window / devices and simulators (Connect via network 체크)
3. 아이폰 에서 기기 신뢰
4. 아이폰 설정 => 개인정보 보호 및 보안 => 개발자모드 (위 3을 해야 보임)
5. 개발자 모드 끔 => 켬 (재부팅 필요)
6. 다시 xcode 실행 => xcode 에서 연결 확인 (devices 에 지구본 모양?)

 

플러터에서 Run 하면 다음과 같은 메시지

════════════════════════════════════════════════════════════════════════════════
No valid code signing certificates were found
You can connect to your Apple Developer account by signing in with your Apple ID
in Xcode and create an iOS Development Certificate as well as a Provisioning 
Profile for your project by:
  1- Open the Flutter project's Xcode target with
       open ios/Runner.xcworkspace
  2- Select the 'Runner' project in the navigator then the 'Runner' target
     in the project settings
  3- Make sure a 'Development Team' is selected under Signing & Capabilities > Team. 
     You may need to:
         - Log in with your Apple ID in Xcode first
         - Ensure you have a valid unique Bundle ID
         - Register your device with your Apple Developer Account
         - Let Xcode automatically provision a profile for your app
  4- Build or run your project again
  5- Trust your newly created Development Certificate on your iOS device
     via Settings > General > Device Management > [your new certificate] > Trust

For more information, please visit:
  https://developer.apple.com/library/content/documentation/IDEs/Conceptual/
  AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html

Or run on an iOS simulator without code signing
════════════════════════════════════════════════════════════════════════════════
Error: No development certificates available to code sign app for device deployment

맥에서 이렇게 뜨면서 안된다.(앱을 전송하는데, 개발자 인증에 이상이 있는 듯 )

 

아마도 애플 개발자 계정 세팅을 해야 하는 듯 하다.

[일단 개발자 계정 등록 전까지 정리 보류]

 

.
.
.
[Several long days later ...]

개발자 등록/ 팀 등록 을 한 후에 다시 시도해 본다.(플러터 에서 시도)

Could not build the precompiled application for the device.
Error (Xcode): Provisioning profile "iOS Team Provisioning Profile: *" doesn't include the currently selected device "폰-이름" (identifier 폰의ID).
/Users/유저네임/StudioProjects/프로젝트명/ios/Runner.xcodeproj


It appears that there was a problem signing your application prior to installation on the device.

Verify that the Bundle Identifier in your project is your signing id in Xcode
  open ios/Runner.xcworkspace

Also try selecting 'Product > Build' to fix the problem.

Error launching application on 폰-이름.

에러가 안나면 섭하지.

메시지상 폰의 아이디를 등록해줘야 하나보다.

 open ios/Runner.xcworkspace

Xcode 를 열고, Runner 에서 디바이스(폰)를 선택하고, 빌드를 해보면.

빌드하면, 디바이스를 등록하라는 메시지가 나온다.

(나는 2번 나왔는데, 등록을 누른 후) 빌드 실패가 뜬다.

등록 후에 바로 되는게 아닌가 보다.

애플 개발자 계정에 들어가보니.

중간의 기기(영문) 으로 들어간다.

보면, 나의 디바이스(폰)의 이름과 ID 등이 나온다. 등록에 시간이 필요한 듯 하다.
안내에 24~72 시간이라는게 보이는데, 저렇게 오래걸리나?

암튼 좀 지난후에 다시 시도해 본다.

..

[One hours later ..]

비교적 빠르게(?) 해당 Processing 메시지가 없어졌다.
다시 시도...

동일한 메시지가 나온다. 다른 부분이 문제라는 것인가...

애플 개발자 계정에서 profiles 쪽에 등록을 해줬다.(이것 때문인지, 정상 빌드 되고 폰에서 설치되었다)

Xcode 열었을 때 다음 메시지도 나오던데.

정확히 어떤 부분으로 인해 해결(?)이 된 것인지 명확하진 않지만, profiles 쪽 등록이 좀더 가능성이 높아 보인다.

 

[알아본 김에 일단 testFlight 까지]

앱을 폰에 빌드까지 해봤으니, 앱스토어에도 올려보려 한다.

testFlight 로 먼저 올려야 겠지.

xcode 열고 Product / archive 를 실행하면 빌드하고, 업로드 준비를 하는 듯 하다.
archive 창에서 Validate App => Distribute App 을 하면 앱이 Apple Connect 업로드 된다.

testFlight 쪽을 보면, 해당 앱이 등록이 되는데. 다음과 같은 메시지가.
수출관련 인 듯 한데, 일단 모두 해당하지 않음 으로 처리.

ios/Runner/Info.plist

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

일단 위 사항까지 하면, 바로 테스터로 등록한 사용자에게 초대메일이 간다.
초대메일 받아서 testFlight 앱 깔고 초대코드 넣으면 바로 앱 설치 가능하다.(이 부분은 안드로이드 테스트 보다 편한 것 같다)

일단 테스트 앱 배포/테스트 까지 ... (추후 실제 출시하기에 필요한 사항이 있을 듯 하지만. )

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,