플러터 앱 - 안드로이드 쪽 자동배포를 해봤는데, 이번에는 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
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

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

요약하면

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
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,