feat(ios): prepare App Store release v1.0.0

- Add PrivacyInfo.xcprivacy for Apple privacy manifest requirement
- Remove debug permissions (NSLocalNetworkUsageDescription, NSBonjourServices)
- Replace launch image with custom branding
- Update StoreKit config with real Apple ID and team ID
- Remove placeholder disclaimer from login screen, fix checkbox alignment
- Add ExportOptions.plist for IPA export
This commit is contained in:
ZL-Q
2026-04-30 13:28:35 +08:00
parent 6432c24e20
commit 52f2123610
9 changed files with 106 additions and 57 deletions
@@ -11,8 +11,6 @@ import '../../../settings/presentation/screens/legal_document_screen.dart';
import '../../../settings/presentation/utils/legal_document_assets.dart';
import '../../../../l10n/app_localizations.dart';
import '../../../../shared/theme/design_tokens.dart';
import '../../../../shared/widgets/app_modal_dialog.dart';
import '../../../../shared/widgets/gua_icon.dart';
import '../../../../shared/widgets/toast/toast.dart';
import '../../../../shared/widgets/toast/toast_type.dart';
@@ -187,26 +185,6 @@ class _LoginScreenState extends State<LoginScreen> {
);
}
void _showPolicyDialog(String title, String content) {
showDialog<void>(
context: context,
builder: (dialogContext) {
return AppModalDialog(
title: title,
message: content,
iconWidget: const GuaIcon(),
actions: [
AppModalDialogAction(
label: AppLocalizations.of(dialogContext)!.dialogConfirm,
primary: true,
onPressed: () => Navigator.of(dialogContext).pop(),
),
],
);
},
);
}
Future<void> _openLegalDocument(LegalDocumentType type) async {
final l10n = AppLocalizations.of(context)!;
await Navigator.of(context).push<void>(
@@ -410,7 +388,7 @@ class _LoginScreenState extends State<LoginScreen> {
),
const SizedBox(height: AppSpacing.md),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Checkbox(
value: _agreementChecked,
@@ -421,11 +399,7 @@ class _LoginScreenState extends State<LoginScreen> {
},
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(
top: AppSpacing.sm,
),
child: RichText(
child: RichText(
text: TextSpan(
style: Theme.of(context)
.textTheme
@@ -447,9 +421,7 @@ class _LoginScreenState extends State<LoginScreen> {
.privacyPolicy,
),
),
TextSpan(
text: l10n.agreementSeparator,
),
TextSpan(text: l10n.agreementAnd),
TextSpan(
text: l10n.termsOfService,
style: TextStyle(
@@ -464,27 +436,12 @@ class _LoginScreenState extends State<LoginScreen> {
.termsOfService,
),
),
TextSpan(text: l10n.agreementAnd),
TextSpan(
text: l10n.disclaimer,
style: TextStyle(
color: colors.primary,
decoration:
TextDecoration.underline,
),
recognizer: TapGestureRecognizer()
..onTap = () => _showPolicyDialog(
l10n.disclaimer,
l10n.disclaimerContent,
),
),
],
),
),
),
),
],
),
],
),
],
),
),