| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Session
- Xcode
- error
- Swift
- Code
- JPA
- Git
- appstore
- github
- Firebase
- Archive
- IOS
- Apple
- iOS16
- 개발자
- mac
- window
- FLUTTER
- MacOS
- Realm
- 웹뷰
- rxswift
- geofencing
- SwiftUI
- 이미지
- shorebird
- darkmode
- UIButton
- 한글
- 맥
- Today
- Total
EEYatHo 앱 깎는 이야기
Flutter ) ShoreBird 중요한 것들 정리 본문
패치가 성능에 미치는 영향
Android는 패치를 적용해도 성능에 영향을 미치지 않음. (애뮬레이터도 마찬가지)
iOS 및 macOS는 패치로직이 Android와 다름.
변경되지 않은 코드는 CPU에서 실행되고, 변경 또는 추가된 코드는 Dart 인터프리터에서 실행됨 (CPU보다 느림)
일반적으로는 이런 성능 차이를 감지할 수 없지만, 성능에 민감한 이미지 또는 대용량 데이터 처리 코드는 성능 차이가 나타날 수 있음
스테이징 패치, 스테이징 프리뷰
성능 영향을 체크하거나 기타 테스트를 위해 스테이징 패치, 스테이징 프리뷰가 존재
// 스테이징 패치 업로드
shorebird patch android --track=staging
// 스테이징 패치를 지정하여 프리뷰로 볼 수 있음
shorebird preview --staging --app-id ee322dc4-3dc2-4324-90a9-04c40a62ae76 --release-version 1.0.0+1
이후 Shorebird 콘솔에서 Go Live를 누르면 프로적션으로 승격하여 모든 기기에 OTA 적용

패치 후 스토어에서 다운받을 때 (링크)
패치를 적용해도, 스토어에서는 패치되지 않은 release를 받게됨
shorebird는 런타임에만 패치를 다운로드할 수 있기때문
따라서 패치전 버전을 원천 차단하기 위해서는, shorebird_code_push를 이용하여 패치 및 재시작이 필요할 타이밍을 파악하여, 강제로 재시작하게 하는 로직이 필요
롤백
1,2,3 패치를 진행 후 3을 롤백하면 패치3을 설치한 유저는 패치 2로 다운그레이드 됨
패치 1 밖에 없는데 롤백했을 경우, 기본 릴리즈로 다운그레이드 됨
shorebird_code_push 에서, 롤백(다운그레이드)도 그냥 update가 필요하다고 나옴
패치 무결성 및 자동 롤백
앱에 포함된 Shorebird의 Updater은, 자동 온디바이스 롤백이 포함 (오픈소스)
어떤 이유로든 패치의 해시나 서명이 일치하지 않으면 패치가 삭제되며,
어떤 이유로든 패치가 Dart 런타임에 로드되지 않으면 해당 장치에서 패치가 “불량” 표시되고 앱은 자동으로 최신 설치된 패치로 롤백됨
이것이 가능한 이유는, 이전 패치 파일은 다음 패치가 성공적으로 부팅될 때 까지 디스크에 보관되며, 부팅이 성공적으로 완료되면 패치 파일이 자동으로 정리되어 디스크 사용량을 최소화함
Crashlytics와의 통합 (패치 버전 파악하기)
Crashlytics를 사용하는 경우 Shorebird 릴리스 및 패치와 함께 바로 작동
그러나 여러 패치가 있는 경우 충돌을 일으킨 패치가 무엇인지 불분명 (Sentry도 마찬가지)
shorebird_code_push 패키지를 사용하면, 패치를 구별 가능하므로, Crashlytics 커스텀 키에 추가하면됨
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
final patchNumber = await ShorebirdCodePush().currentPatchNumber();
// Add the patch number as a tag. You can use whatever name you would like
// as the key. `$patchNumber` will be "null" if there is no patch. You may
// wish to handle this case differently.
FirebaseCrashlytics.instance.setCustomKey(
'shorebird_patch_number',
'$patchNumber',
);
runApp(const MyApp());
}
흔한 실수. updater.isAvailable == false인 경우
- 빌드 모드가 release가 아닌 debug 일때
- shorebird release 명령어가 아닌 다른 방법으로 빌드되었을 때
shorebird preview 흔한 실수
내가 수정한 코드가 바로 보이는 것이 아닌, shorebird에 있는 release를 받아오는 것임.
사이드 로딩 및 MDM
스토어에 등록하여 배포하지 않고, 사이드 로딩이나 MDM으로 설치된 앱도 shorebird가 잘 동작함
아래 명령어로 shorebird가 적용된 APK를 얻을 수 있음
shorebird release android --artifact=apk
안드로이드 INTERNET 권한 필요
앱이 Shorebird 서버와 통신하여 패치를 다운로드할 수 있도록 하는 데 필요
shorebird init 명령어는 이 권한이 없으면 자동으로 추가해주기에 신경x
// android/app/src/main/AndroidManifest.xml
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
프로젝트를 다시 초기화 하고싶다면
shorebird init --force 명령어를 사용
shorebird.yaml에 새로운 app과 app_id를 만듦
기존 앱은 향을 받지 않음
iOS preview가 안된다면
기존에 깔려있던 앱을 삭제하고 시도
새로운 위젯 추가, 새로운 라우팅 추가 다 잘 되는가?
실헝해보니 iOS, Android 다 잘됨
'Flutter > ShoreBird' 카테고리의 다른 글
| Flutter ) ShoreBird 배포가이드 (0) | 2025.04.14 |
|---|---|
| Flutter ) ShoreBird 활용 강제 업데이트 적용 (0) | 2025.04.14 |
| Flutter ) CodePush(ShoreBird) 개요 (0) | 2025.04.14 |