@maccesar/titools 5.2.5 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +58 -97
- package/agents/ti-pro.md +4 -2
- package/commands/ti-audit.md +7 -5
- package/docs/examples.md +24 -13
- package/docs/knowledge-index.md +2 -1
- package/lib/config.js +1 -0
- package/package.json +1 -1
- package/skills/alloy-guides/SKILL.md +18 -179
- package/skills/alloy-guides/references/CLI_TASKS.md +17 -216
- package/skills/alloy-guides/references/CONCEPTS.md +27 -162
- package/skills/alloy-guides/references/CONTROLLERS.md +38 -236
- package/skills/alloy-guides/references/MODELS.md +47 -723
- package/skills/alloy-guides/references/MODELS_ADVANCED.md +21 -482
- package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +12 -222
- package/skills/alloy-guides/references/VIEWS_STYLES.md +39 -358
- package/skills/alloy-guides/references/VIEWS_XML.md +36 -552
- package/skills/alloy-guides/references/WIDGETS.md +49 -127
- package/skills/alloy-howtos/SKILL.md +14 -169
- package/skills/alloy-howtos/references/best_practices.md +9 -113
- package/skills/alloy-howtos/references/cli_reference.md +18 -223
- package/skills/alloy-howtos/references/config_files.md +50 -133
- package/skills/alloy-howtos/references/debugging_troubleshooting.md +19 -63
- package/skills/alloy-howtos/references/samples.md +21 -138
- package/skills/ti-api/SKILL.md +10 -2
- package/skills/ti-api/references/api-android.md +36 -2
- package/skills/ti-api/references/api-app-platform.md +39 -3
- package/skills/ti-api/references/api-core.md +50 -18
- package/skills/ti-api/references/api-data-network.md +49 -35
- package/skills/ti-api/references/api-media.md +45 -27
- package/skills/ti-api/references/api-services.md +39 -9
- package/skills/ti-api/references/api-ui-android.md +33 -13
- package/skills/ti-api/references/api-ui-extras.md +41 -15
- package/skills/ti-api/references/api-ui-ios-animator.md +42 -26
- package/skills/ti-api/references/api-ui-ios.md +74 -2
- package/skills/ti-api/references/api-ui-lists.md +32 -16
- package/skills/ti-api/references/api-ui-text-input.md +34 -17
- package/skills/ti-api/references/api-ui-views.md +27 -1
- package/skills/ti-api/references/api-ui-windows-navigation.md +32 -18
- package/skills/ti-api/references/api-xml-global.md +66 -16
- package/skills/ti-create-release/SKILL.md +98 -0
- package/skills/ti-create-release/references/module-discovery.md +69 -0
- package/skills/ti-expert/references/adaptive-layouts.md +1 -1
- package/skills/ti-guides/SKILL.md +37 -76
- package/skills/ti-guides/references/advanced-data-and-images.md +122 -126
- package/skills/ti-guides/references/android-manifest.md +24 -83
- package/skills/ti-guides/references/app-distribution.md +31 -377
- package/skills/ti-guides/references/application-frameworks.md +127 -335
- package/skills/ti-guides/references/cli-reference.md +184 -633
- package/skills/ti-guides/references/commonjs-advanced.md +81 -231
- package/skills/ti-guides/references/compatibility-matrix.md +36 -75
- package/skills/ti-guides/references/hello-world.md +95 -70
- package/skills/ti-guides/references/hyperloop-native-access.md +52 -448
- package/skills/ti-guides/references/resources.md +174 -142
- package/skills/ti-guides/references/sdk-release-notes.md +28 -71
- package/skills/ti-guides/references/tiapp-config.md +222 -598
- package/skills/ti-howtos/SKILL.md +23 -123
- package/skills/ti-howtos/references/cross-platform-development.md +119 -324
- package/skills/ti-howtos/references/debugging-profiling.md +77 -445
- package/skills/ti-howtos/references/extending-titanium.md +199 -673
- package/skills/ti-howtos/references/local-data-sources.md +87 -300
- package/skills/ti-howtos/references/location-and-maps.md +86 -213
- package/skills/ti-howtos/references/media-apis.md +103 -223
- package/skills/ti-howtos/references/notification-services.md +86 -506
- package/skills/ti-howtos/references/remote-data-sources.md +97 -316
- package/skills/ti-howtos/references/using-modules.md +77 -133
- package/skills/ti-synthengine/SKILL.md +62 -111
- package/skills/ti-synthengine/assets/example/README.md +50 -59
- package/skills/ti-synthengine/assets/example/app.js +67 -65
- package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +39 -40
- package/skills/ti-synthengine/assets/example/lib/soundPreset.js +34 -0
- package/skills/ti-synthengine/assets/index.d.ts +122 -2
- package/skills/ti-synthengine/references/advanced-examples.md +4 -4
- package/skills/ti-synthengine/references/api.md +40 -18
- package/skills/ti-synthengine/references/audio-engine.md +15 -57
- package/skills/ti-synthengine/references/examples.md +63 -6
- package/skills/ti-synthengine/references/guide.md +61 -57
- package/skills/ti-synthengine/references/instruments-and-effects.md +15 -15
- package/skills/ti-synthengine/references/native-variation.md +53 -14
- package/skills/ti-synthengine/references/recipes-interaction.md +25 -20
- package/skills/ti-synthengine/references/recipes.md +19 -16
- package/skills/ti-synthengine/references/recommendations.md +12 -12
- package/skills/ti-synthengine/references/sound-api.md +197 -0
- package/skills/ti-synthengine/references/sound-design.md +7 -7
- package/skills/ti-synthengine/references/source-notes.md +62 -172
- package/skills/ti-synthengine/references/troubleshooting.md +17 -19
- package/skills/ti-synthengine/references/upgrade-2.0.0.md +40 -0
- package/skills/ti-ui/SKILL.md +28 -143
- package/skills/ti-ui/references/icons-and-splash-screens.md +74 -403
- package/skills/ti-ui/references/layouts-and-positioning.md +175 -402
- package/skills/ti-ui/references/listviews-and-performance.md +100 -703
- package/skills/ti-ui/references/platform-conventions.md +180 -0
- package/skills/ti-ui/references/user-interface.md +43 -0
- package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +0 -102
- package/skills/alloy-howtos/references/custom_tags.md +0 -148
- package/skills/ti-guides/references/coding-best-practices.md +0 -149
- package/skills/ti-guides/references/javascript-primer.md +0 -414
- package/skills/ti-guides/references/reserved-words.md +0 -36
- package/skills/ti-guides/references/style-and-conventions.md +0 -103
- package/skills/ti-howtos/references/android-platform-deep-dives.md +0 -624
- package/skills/ti-howtos/references/automation-fastlane-appium.md +0 -96
- package/skills/ti-howtos/references/buffer-codec-streams.md +0 -162
- package/skills/ti-howtos/references/google-maps-v2.md +0 -172
- package/skills/ti-howtos/references/ios-map-kit.md +0 -149
- package/skills/ti-howtos/references/ios-platform-deep-dives.md +0 -611
- package/skills/ti-howtos/references/tutorials.md +0 -565
- package/skills/ti-howtos/references/web-content-integration.md +0 -287
- package/skills/ti-howtos/references/webpack-build-pipeline.md +0 -124
- package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
- package/skills/ti-synthengine/references/android-sim80-correction.json +0 -162
- package/skills/ti-synthengine/references/audio-pipeline-validation.md +0 -19
- package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-physical-validation.json +0 -1918
- package/skills/ti-synthengine/references/native-tone-repetition-validation.md +0 -59
- package/skills/ti-synthengine/references/native-variation-proposal.md +0 -182
- package/skills/ti-synthengine/references/native-variation-validation.md +0 -63
- package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
- package/skills/ti-synthengine/references/performance-review.json +0 -1146
- package/skills/ti-synthengine/references/physical-validation.json +0 -1457
- package/skills/ti-synthengine/references/source-snapshot.json +0 -542
- package/skills/ti-synthengine/references/stats-performance.json +0 -2992
- package/skills/ti-synthengine/references/stats-performance.md +0 -82
- package/skills/ti-synthengine/references/studio-validation.json +0 -6202
- package/skills/ti-synthengine/references/unified-bypass-performance.json +0 -22425
- package/skills/ti-synthengine/references/unified-validation.json +0 -314
- package/skills/ti-ui/references/accessibility-deep-dive.md +0 -288
- package/skills/ti-ui/references/animation-and-matrices.md +0 -569
- package/skills/ti-ui/references/application-structures.md +0 -626
- package/skills/ti-ui/references/custom-fonts-styling.md +0 -549
- package/skills/ti-ui/references/event-handling.md +0 -401
- package/skills/ti-ui/references/gestures.md +0 -448
- package/skills/ti-ui/references/orientation.md +0 -374
- package/skills/ti-ui/references/platform-ui-android.md +0 -727
- package/skills/ti-ui/references/platform-ui-ios.md +0 -576
- package/skills/ti-ui/references/scrolling-views.md +0 -288
- package/skills/ti-ui/references/tableviews.md +0 -542
|
@@ -1,407 +1,61 @@
|
|
|
1
1
|
# App distribution guide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Release prerequisites and identities
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
## Contents
|
|
5
|
+
Use a shipped SDK and compatible native modules, keep the app ID stable, and build distributed artifacts with `--deploy-type production`. Distribution targets imply production; development leaves debugging enabled. Android needs a developer account and signing keystore; iOS needs macOS, paid Apple Developer membership, a distribution certificate/private key and a profile matching the app ID and distribution method. Uploading an artifact is separate from submitting review or rolling out a release.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
- [1. Generate keystore and certificate](#1-generate-keystore-and-certificate)
|
|
10
|
-
- [2. Verify keystore](#2-verify-keystore)
|
|
11
|
-
- [3. Build for Google Play](#3-build-for-google-play)
|
|
12
|
-
- [4. Verify APK signing](#4-verify-apk-signing)
|
|
13
|
-
- [5. Deploy to device for testing](#5-deploy-to-device-for-testing)
|
|
14
|
-
- [6. Google Play submission requirements](#6-google-play-submission-requirements)
|
|
15
|
-
- [7. SD card installation](#7-sd-card-installation)
|
|
16
|
-
- [iOS distribution](#ios-distribution)
|
|
17
|
-
- [1. Distribution types](#1-distribution-types)
|
|
18
|
-
- [2. Create distribution certificate](#2-create-distribution-certificate)
|
|
19
|
-
- [3. Create distribution provisioning profile](#3-create-distribution-provisioning-profile)
|
|
20
|
-
- [4. Create App ID on App Store Connect](#4-create-app-id-on-app-store-connect)
|
|
21
|
-
- [5. Build and package](#5-build-and-package)
|
|
22
|
-
- [6. Upload to App Store Connect](#6-upload-to-app-store-connect)
|
|
23
|
-
- [7. Ad Hoc distribution](#7-ad-hoc-distribution)
|
|
24
|
-
- [Mac Catalyst distribution (Mac App Store)](#mac-catalyst-distribution-mac-app-store)
|
|
25
|
-
- [1. Enable Mac Catalyst for your App ID](#1-enable-mac-catalyst-for-your-app-id)
|
|
26
|
-
- [2. Create Mac App Store Distribution Certificate](#2-create-mac-app-store-distribution-certificate)
|
|
27
|
-
- [3. Mac Catalyst build targets](#3-mac-catalyst-build-targets)
|
|
28
|
-
- [4. Build for Mac Catalyst (Development)](#4-build-for-mac-catalyst-development)
|
|
29
|
-
- [5. Build for Mac App Store (Distribution)](#5-build-for-mac-app-store-distribution)
|
|
30
|
-
- [6. Upload to Mac App Store Connect](#6-upload-to-mac-app-store-connect)
|
|
31
|
-
- [7. Create app listing in App Store Connect](#7-create-app-listing-in-app-store-connect)
|
|
32
|
-
- [8. Mac Catalyst entitlements](#8-mac-catalyst-entitlements)
|
|
33
|
-
- [9. Common issues](#9-common-issues)
|
|
34
|
-
- [10. Versioning](#10-versioning)
|
|
35
|
-
- [11. Testing on Mac](#11-testing-on-mac)
|
|
7
|
+
Back up signing credentials and passwords securely; exclude keystores, `.p12` files, provisioning files and secrets from source control. A certificate downloaded without its private key cannot sign. Export an encrypted `.p12` from the originating keychain when moving a team identity to another Mac. Xcode Settings → Accounts → Manage Certificates or the developer portal creates identities; available actions depend on account role, not an unconditional “only Team Agent” rule. Inspect detected certificates/profile UUIDs with `ti info -t ios`.
|
|
36
8
|
|
|
37
|
-
|
|
9
|
+
## Android: keystore, bundle and release track
|
|
38
10
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Create a keystore for signing your app:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
keytool -genkeypair -v -keystore android.keystore -alias helloworld -keyalg RSA -sigalg SHA1withRSA -validity 10000
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Requirements:
|
|
50
|
-
- `keyalg`: RSA (required by Google Play)
|
|
51
|
-
- `sigalg`: SHA1withRSA (Android 4.3-) or SHA256withRSA (Android 4.4+)
|
|
52
|
-
- `validity`: 10000 days minimum (~25 years)
|
|
53
|
-
|
|
54
|
-
Save your keystore password securely. If it is lost, you cannot release updates.
|
|
55
|
-
|
|
56
|
-
### 2. Verify keystore
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
keytool -list -v -keystore android.keystore
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### 3. Build for Google Play
|
|
63
|
-
|
|
64
|
-
CLI command:
|
|
65
|
-
```bash
|
|
66
|
-
ti build -p android -T dist-playstore [-K <KEYSTORE_FILE> -P <KEYSTORE_PASSWORD> -L <KEYSTORE_ALIAS> -O <OUTPUT_DIRECTORY>]
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Example:
|
|
70
|
-
```bash
|
|
71
|
-
ti build -p android -T dist-playstore -K ~/android.keystore -P secret -L foo -O ./dist/
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Output files:
|
|
75
|
-
- `.apk`: legacy format (still supported)
|
|
76
|
-
- `.aab`: Android App Bundle (preferred, smaller downloads). Requires Titanium 9.0.0+. An AAB file cannot be installed directly on a device. After upload, Google Play generates device-specific APKs split by CPU architecture and image density.
|
|
77
|
-
|
|
78
|
-
### 4. Verify APK signing
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
jarsigner -verify -verbose path/yourapp.apk
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 5. Deploy to device for testing
|
|
85
|
-
|
|
86
|
-
Using CLI:
|
|
87
|
-
```bash
|
|
88
|
-
ti build -p android -T device --device-id "<DEVICE_ID>"
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Using adb:
|
|
92
|
-
```bash
|
|
93
|
-
adb install -r your_project/build/android/bin/app.apk
|
|
94
|
-
adb uninstall com.your.appid
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Remote testing:
|
|
98
|
-
- Host the APK on a web server or Dropbox and email a link
|
|
99
|
-
- Use HockeyKit/HockeyApp for beta distribution
|
|
100
|
-
|
|
101
|
-
### 6. Google Play submission requirements
|
|
102
|
-
|
|
103
|
-
Required assets:
|
|
104
|
-
- At least 2 screenshots (320x480, 480x800, or 480x854)
|
|
105
|
-
- High-res icon (512x512)
|
|
106
|
-
- Title, description (4000 chars max)
|
|
107
|
-
- Promo text (80 chars max)
|
|
108
|
-
- Category and content rating
|
|
109
|
-
- Contact information
|
|
110
|
-
|
|
111
|
-
Versioning in `tiapp.xml`:
|
|
112
|
-
```xml
|
|
113
|
-
<android xmlns:android="http://schemas.android.com/apk/res/android">
|
|
114
|
-
<manifest android:versionCode="2" android:versionName="1.0.1"/>
|
|
115
|
-
</android>
|
|
11
|
+
```sh
|
|
12
|
+
keytool -genkeypair -v -keystore myapp.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000
|
|
13
|
+
keytool -list -v -keystore myapp.keystore
|
|
14
|
+
ti build -p android -T dist-playstore -K /secure/myapp.keystore -L myapp -O ./dist
|
|
116
15
|
```
|
|
117
16
|
|
|
118
|
-
- `
|
|
119
|
-
- `versionName`: string in any format you choose
|
|
17
|
+
Let the CLI prompt for the password. CI can supply `--store-password` and, when distinct, `--key-password` from its secret system; command-line values can appear in logs/history. VS Code can remember `titanium.android.keystorePath` and `titanium.android.keystoreAlias`; do not put the password in settings. Avoid legacy SHA-1 generation advice.
|
|
120
18
|
|
|
121
|
-
|
|
19
|
+
Current Google Play submissions use an `.aab` Android App Bundle. Play creates device-specific APKs; an AAB cannot be installed with `adb install`. Test the actual bundle through a Play internal track or Google's bundletool, not only a debug APK. A locally installable APK can be checked with `apksigner verify --verbose --print-certs app.apk`; `jarsigner` alone does not verify every modern APK signature scheme.
|
|
122
20
|
|
|
123
21
|
```xml
|
|
124
22
|
<android xmlns:android="http://schemas.android.com/apk/res/android">
|
|
125
|
-
|
|
23
|
+
<manifest android:versionCode="2" android:versionName="1.0.1"/>
|
|
126
24
|
</android>
|
|
127
25
|
```
|
|
128
26
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## iOS distribution
|
|
134
|
-
|
|
135
|
-
### 1. Distribution types
|
|
136
|
-
|
|
137
|
-
- App Store: public distribution via App Store (formerly iTunes Connect, now App Store Connect)
|
|
138
|
-
- Ad Hoc: limited testing (max 100 devices per year; devices cannot be removed once registered, so use care when registering)
|
|
139
|
-
- In House: enterprise distribution for employees (Enterprise program only)
|
|
140
|
-
|
|
141
|
-
### 2. Create distribution certificate
|
|
142
|
-
|
|
143
|
-
Certificate types:
|
|
144
|
-
- Development certificate: each developer can have their own, used for test builds.
|
|
145
|
-
- Distribution certificate: a single certificate for the entire team. Only the Team Agent (account owner) can create it.
|
|
146
|
-
|
|
147
|
-
Steps:
|
|
148
|
-
1. Log in to Apple Developer Member Center as Team Agent or Admin.
|
|
149
|
-
2. Go to Certificates, Identifiers & Profiles, then Certificates.
|
|
150
|
-
3. Click +, then choose App Store and Ad Hoc.
|
|
151
|
-
4. Create a CSR (Certificate Signing Request) in Keychain Access.
|
|
152
|
-
5. Upload the CSR and generate the certificate.
|
|
153
|
-
6. Download and install the `.cer` file.
|
|
154
|
-
7. Export the private key as a `.p12` file (File > Export Items).
|
|
155
|
-
|
|
156
|
-
### 3. Create distribution provisioning profile
|
|
157
|
-
|
|
158
|
-
1. In Member Center, go to Provisioning Profiles.
|
|
159
|
-
2. Click + and select the distribution type.
|
|
160
|
-
3. Select an App ID.
|
|
161
|
-
4. Select the distribution certificate.
|
|
162
|
-
5. For Ad Hoc, select test devices.
|
|
163
|
-
6. Name the profile (include "distribution" or "ad hoc").
|
|
164
|
-
7. Download the `.mobileprovision` file and install it (drag to Xcode).
|
|
165
|
-
|
|
166
|
-
### 4. Create App ID on App Store Connect
|
|
167
|
-
|
|
168
|
-
App Store Connect is the portal for app distribution management.
|
|
169
|
-
|
|
170
|
-
1. Log in to App Store Connect.
|
|
171
|
-
2. Go to Manage Your Apps, then Add New App.
|
|
172
|
-
3. Provide:
|
|
173
|
-
- App name
|
|
174
|
-
- SKU number (unique ID)
|
|
175
|
-
- Bundle ID (must match App ID from Developer Portal)
|
|
176
|
-
4. Configure:
|
|
177
|
-
- Availability date
|
|
178
|
-
- Price tier
|
|
179
|
-
- Version number
|
|
180
|
-
- Description (4000 chars max)
|
|
181
|
-
- Category, keywords (100 chars max)
|
|
182
|
-
- Copyright
|
|
183
|
-
- Support URL
|
|
184
|
-
- Rating info
|
|
185
|
-
- High-res icon: 1024x1024, 72 DPI, RGB, flat artwork
|
|
186
|
-
- Screenshots:
|
|
187
|
-
- iPhone (3.5"): 960x640, 960x600, 640x960, or 640x920
|
|
188
|
-
- iPhone (4"): 1136x640, 1136x600, 640x1136, or 640x1096
|
|
189
|
-
- iPad: 1024x768, 1024x748, 768x1024, 768x1004, 2048x1536, 2048x1496, 1536x2048, or 1536x2008
|
|
190
|
-
5. Click Ready to Upload Binary.
|
|
191
|
-
|
|
192
|
-
### 5. Build and package
|
|
193
|
-
|
|
194
|
-
CLI command - Ad Hoc:
|
|
195
|
-
```bash
|
|
196
|
-
ti build -p ios -T dist-adhoc [-R <DISTRIBUTION_CERTIFICATE_NAME> -P <PROVISIONING_PROFILE_UUID> -O <OUTPUT_DIRECTORY>]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
Example:
|
|
200
|
-
```bash
|
|
201
|
-
ti build -p ios -T dist-adhoc -R "Pseudo, Inc." -P "FFFFFFFF-EEEE-DDDD-CCCC-BBBBBBBBBBBB" -O ./dist/
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
CLI command - App Store:
|
|
205
|
-
```bash
|
|
206
|
-
ti build -p ios -T dist-appstore [-R <DISTRIBUTION_CERTIFICATE_NAME> -P <PROVISIONING_PROFILE_UUID>]
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
Example:
|
|
210
|
-
```bash
|
|
211
|
-
ti build -p ios -T dist-appstore -R "Pseudo, Inc." -P "AAAAAAAA-0000-9999-8888-777777777777"
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
The CLI installs the package to Xcode's Organizer.
|
|
215
|
-
|
|
216
|
-
### 6. Upload to App Store Connect
|
|
217
|
-
|
|
218
|
-
1. Open Xcode, then Window, then Organizer.
|
|
219
|
-
2. Select your app archive.
|
|
220
|
-
3. Click Verify to validate against the App Store Connect app definition.
|
|
221
|
-
4. Click Submit to upload.
|
|
222
|
-
5. Status changes to Waiting for Review.
|
|
223
|
-
|
|
224
|
-
### 7. Ad Hoc distribution
|
|
225
|
-
|
|
226
|
-
Testers need:
|
|
227
|
-
- The `.mobileprovision` file installed on their device
|
|
228
|
-
- The `.ipa` package file
|
|
229
|
-
|
|
230
|
-
Installation method:
|
|
231
|
-
1. Connect the device to a Mac.
|
|
232
|
-
2. Open Xcode, then Window, then Devices.
|
|
233
|
-
3. Select the device, then Installed Apps, then +.
|
|
234
|
-
4. Select the IPA file.
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## Mac Catalyst distribution (Mac App Store)
|
|
239
|
-
|
|
240
|
-
Mac Catalyst allows you to run your iPad app on macOS. Titanium SDK 13.1.1.GA and later supports building for Mac Catalyst.
|
|
241
|
-
|
|
242
|
-
### 1. Enable Mac Catalyst for your App ID
|
|
243
|
-
|
|
244
|
-
1. Go to [Apple Developer → Identifiers](https://developer.apple.com/account/resources/identifiers/list)
|
|
245
|
-
2. Select your App ID or create a new one
|
|
246
|
-
3. Enable **Mac Catalyst** capability
|
|
247
|
-
4. Save the changes
|
|
248
|
-
|
|
249
|
-
### 2. Create Mac App Store Distribution Certificate
|
|
250
|
-
|
|
251
|
-
1. Go to [Apple Developer → Certificates](https://developer.apple.com/account/resources/certificates/list)
|
|
252
|
-
2. Click **+** to create a new certificate
|
|
253
|
-
3. Select **Mac App Store Distribution**
|
|
254
|
-
4. Upload your CSR (Certificate Signing Request)
|
|
255
|
-
5. Download and install the certificate
|
|
256
|
-
|
|
257
|
-
### 3. Mac Catalyst build targets
|
|
258
|
-
|
|
259
|
-
Titanium provides two targets for Mac Catalyst:
|
|
260
|
-
|
|
261
|
-
| Target | Description | Configuration |
|
|
262
|
-
|--------|-------------|---------------|
|
|
263
|
-
| `macos` | Development builds for testing on Mac | Debug-maccatalyst |
|
|
264
|
-
| `dist-macappstore` | Production builds for Mac App Store | Release-maccatalyst |
|
|
265
|
-
|
|
266
|
-
### 4. Build for Mac Catalyst (Development)
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
ti build -p ios -T macos
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
The `.app` bundle will be created at:
|
|
273
|
-
```
|
|
274
|
-
build/iphone/build/Products/Debug-maccatalyst/AppName.app
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
For a production-ready build:
|
|
278
|
-
```bash
|
|
279
|
-
ti build -p ios -T macos --deploy-type production
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
The `.app` bundle will be at:
|
|
283
|
-
```
|
|
284
|
-
build/iphone/build/Products/Release-maccatalyst/AppName.app
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### 5. Build for Mac App Store (Distribution)
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
ti build -p ios -T dist-macappstore [-R <CERTIFICATE_NAME>]
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
Example:
|
|
294
|
-
```bash
|
|
295
|
-
ti build -p ios -T dist-macappstore -R "Apple Distribution: Your Team Name (TEAM_ID)"
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
If you omit the `-R` flag, Titanium will prompt you to select a certificate.
|
|
27
|
+
Increase the integer `android:versionCode` on every upload. The human `<version>`/versionName is separate. Check the current Play Console limit and annual target API policy; SDK 13.4.1 defaults to API 36. Compile API (`tool-api-level`) and target API are distinct settings. Provide store text/artwork, content rating, privacy policy and Data safety responses reflecting actual app/module collection and merged permissions. Screenshot/device requirements change; use Console's current required slots rather than archived 320×480 rules.
|
|
299
28
|
|
|
300
|
-
|
|
301
|
-
- Uses `Release-maccatalyst` configuration
|
|
302
|
-
- Sets code signing to Manual with identity `-`
|
|
303
|
-
- Creates a `.xcarchive` for Mac App Store
|
|
304
|
-
- Installs the archive in Xcode's Organizer
|
|
305
|
-
- Destination: `generic/platform=macOS`
|
|
29
|
+
Upload to internal, closed, open or production track, then explicitly roll out that track. For direct device development use `ti build -p android -T device --device-id <id>`; a test APK installs with `adb install -r app.apk`. Uninstalling first deletes local data and is not a harmless update step.
|
|
306
30
|
|
|
307
|
-
|
|
31
|
+
Play App Signing holds the app-signing key and lets you use a separate upload key. Losing a resettable upload key is different from losing the only self-managed app-signing key; check the app's signing setup before concluding updates are impossible. Follow [Google's signing and upload-key reset procedure](https://support.google.com/googleplay/android-developer/answer/9842756). Retain independent backups even with managed signing.
|
|
308
32
|
|
|
309
|
-
|
|
310
|
-
2. Select your Mac Catalyst archive
|
|
311
|
-
3. Click **Validate App** to check for issues
|
|
312
|
-
4. Click **Distribute App**
|
|
313
|
-
5. Select **Mac App Store**
|
|
314
|
-
6. Follow the prompts to upload
|
|
33
|
+
## iOS: provisioning, archive and review
|
|
315
34
|
|
|
316
|
-
|
|
35
|
+
Create an App ID matching `<id>`, a distribution certificate, then a profile for that App ID/certificate. Ad Hoc profiles must contain every tester UDID; device quotas and annual registration rules are controlled by Apple. Download/install the profile and verify the certificate's private key in Keychain.
|
|
317
36
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
4. Enter app details:
|
|
322
|
-
- Name
|
|
323
|
-
- Primary Language
|
|
324
|
-
- Bundle ID (must match your App ID with Mac Catalyst enabled)
|
|
325
|
-
- SKU
|
|
326
|
-
5. Complete required metadata:
|
|
327
|
-
- Description
|
|
328
|
-
- Keywords
|
|
329
|
-
- Screenshots (Mac-specific sizes)
|
|
330
|
-
- Category
|
|
331
|
-
- Age rating
|
|
332
|
-
|
|
333
|
-
### 8. Mac Catalyst entitlements
|
|
334
|
-
|
|
335
|
-
Add Mac-specific entitlements in `tiapp.xml`:
|
|
336
|
-
|
|
337
|
-
```xml
|
|
338
|
-
<ios>
|
|
339
|
-
<entitlements>
|
|
340
|
-
<dict>
|
|
341
|
-
<!-- File access for saving to Downloads -->
|
|
342
|
-
<key>com.apple.security.files.user-selected.read-write</key>
|
|
343
|
-
<true/>
|
|
344
|
-
<key>com.apple.security.files.downloads.read-write</key>
|
|
345
|
-
<true/>
|
|
346
|
-
|
|
347
|
-
<!-- App sandbox (required for Mac App Store) -->
|
|
348
|
-
<key>com.apple.security.app-sandbox</key>
|
|
349
|
-
<true/>
|
|
350
|
-
|
|
351
|
-
<!-- Network access -->
|
|
352
|
-
<key>com.apple.security.network.client</key>
|
|
353
|
-
<true/>
|
|
354
|
-
|
|
355
|
-
<!-- Additional entitlements as needed -->
|
|
356
|
-
<key>com.apple.security.print</key>
|
|
357
|
-
<true/>
|
|
358
|
-
</dict>
|
|
359
|
-
</entitlements>
|
|
360
|
-
</ios>
|
|
37
|
+
```sh
|
|
38
|
+
ti build -p ios -T dist-appstore -R "Apple Distribution: Example Ltd (ABCDE12345)" -P <profile-uuid> -O ./dist
|
|
39
|
+
ti build -p ios -T dist-adhoc -R "Apple Distribution: Example Ltd (ABCDE12345)" -P <adhoc-profile-uuid> -O ./dist
|
|
361
40
|
```
|
|
362
41
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
**Issue**: "No suitable signing certificate found"
|
|
366
|
-
- Ensure you have a **Mac App Store Distribution Certificate** (not iOS Distribution)
|
|
367
|
-
- The certificate must be installed in your Keychain
|
|
368
|
-
|
|
369
|
-
**Issue**: Build fails with code signing errors
|
|
370
|
-
- Verify your App ID has Mac Catalyst enabled
|
|
371
|
-
- Check that the certificate matches the App ID
|
|
372
|
-
- Try cleaning the build: `ti clean -p ios`
|
|
42
|
+
The App Store target creates an archive for Xcode Organizer and exports an IPA to the output directory; inspect the build log for actual archive/export paths. Validate and distribute through Xcode Organizer, or upload an exported signed IPA through Transporter using the supported Apple workflow. Uploading does not submit review: create/select the App Store Connect app record (name, language, SKU and matching bundle ID), attach the processed build to a version, complete metadata/privacy/export answers, and submit. Ad Hoc IPA installation requires a device listed in the embedded profile; use Xcode's device tooling or a supported installation service. TestFlight is the normal store-managed beta path.
|
|
373
43
|
|
|
374
|
-
|
|
375
|
-
- Verify entitlements are correctly configured
|
|
376
|
-
- Check Console.app for crash logs
|
|
377
|
-
- Ensure all required capabilities are enabled
|
|
44
|
+
Keep marketing version `<version>` and upload build number distinct. Set `CFBundleVersion` in `<ios><plist><dict>` to increase build numbers without unnecessarily changing the marketing version. Do not reuse a build number already uploaded for that version.
|
|
378
45
|
|
|
379
|
-
|
|
46
|
+
Before submission verify:
|
|
380
47
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
<id>com.yourcompany.yourapp</id>
|
|
386
|
-
<name>Your App Name</name>
|
|
387
|
-
<version>1.0.0</version>
|
|
388
|
-
<publisher>Your Company</publisher>
|
|
389
|
-
...
|
|
390
|
-
</ti:app>
|
|
391
|
-
```
|
|
48
|
+
- Real permission purpose strings under `<ios><plist><dict>`, plus runtime permission requests. Missing required strings can crash permission access; generic reasons can fail review.
|
|
49
|
+
- A correct `PrivacyInfo.xcprivacy` based on actual required-reason APIs and data collection. For the 13.4.1 bundle resource pipeline use `Resources/iphone/PrivacyInfo.xcprivacy` (Classic), or `app/assets/iphone/PrivacyInfo.xcprivacy` (Alloy). Verify it exists at the built app's root. Bare `platform/ios/PrivacyInfo.xcprivacy` goes to the native build directory, not automatically the app bundle root.
|
|
50
|
+
- Required screenshots, icon, categories, age rating, support/privacy URLs, login/demo access, and device-family/OS support. Current App Store Connect requirements replace archive-era 3.5-inch screenshot tables.
|
|
51
|
+
- The selected capabilities, profile and entitlements agree, and the release launches on real supported devices.
|
|
392
52
|
|
|
393
|
-
|
|
394
|
-
- For iOS, use `pv-version-code` in `<ios>` section for build number
|
|
395
|
-
- For Mac, the build number can be set in Xcode or via `CFBundleVersion`
|
|
53
|
+
## JavaScript encryption and debugging
|
|
396
54
|
|
|
397
|
-
|
|
55
|
+
SDK 13.4.1 uses `ti.cloak` internally. Development does not encrypt; test and production encrypt/minify, while test keeps debugging and production disables it. `dist-appstore` and `dist-playstore` use production. The new website's alternative `<encryption>ti.crypt</encryption>` selector is not present in the 13.4.1 builders and must not be offered as GA configuration.
|
|
398
56
|
|
|
399
|
-
|
|
57
|
+
Encryption deters casual inspection; the application must decrypt its code to run, so it is not a security boundary. Embedded server secrets remain recoverable in JavaScript, JSON, properties or `tiapp.xml`. Keep them on a server and use appropriate native secure storage for user credentials. Reproduce encryption-specific bugs with test deploy type; preserve source maps securely when emitting them.
|
|
400
58
|
|
|
401
|
-
|
|
402
|
-
2. Run the app on different Mac architectures (Intel and Apple Silicon)
|
|
403
|
-
3. Test all features that use file system, network, and other sandboxed resources
|
|
404
|
-
4. Verify entitlements are working correctly
|
|
405
|
-
5. Test on macOS versions you plan to support
|
|
59
|
+
Complete Apple's encryption/export declaration according to the app's actual cryptography. `ITSAppUsesNonExemptEncryption=false` belongs in `<ios><plist><dict>` only when the app qualifies for that answer; do not set it universally because a template did. Consult Apple's current criteria for the specific app.
|
|
406
60
|
|
|
407
|
-
|
|
61
|
+
Sources: [distribution](https://titaniumsdk.com/docs/distribute.md), [signing](https://titaniumsdk.com/docs/distribute/signing.md), [iOS](https://titaniumsdk.com/docs/distribute/ios.md), [Android](https://titaniumsdk.com/docs/distribute/android.md), [encryption](https://titaniumsdk.com/docs/distribute/encryption.md), and [Apple certificates](https://developer.apple.com/help/account/certificates/certificates-overview).
|