@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.
Files changed (138) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +58 -97
  3. package/agents/ti-pro.md +4 -2
  4. package/commands/ti-audit.md +7 -5
  5. package/docs/examples.md +24 -13
  6. package/docs/knowledge-index.md +2 -1
  7. package/lib/config.js +1 -0
  8. package/package.json +1 -1
  9. package/skills/alloy-guides/SKILL.md +18 -179
  10. package/skills/alloy-guides/references/CLI_TASKS.md +17 -216
  11. package/skills/alloy-guides/references/CONCEPTS.md +27 -162
  12. package/skills/alloy-guides/references/CONTROLLERS.md +38 -236
  13. package/skills/alloy-guides/references/MODELS.md +47 -723
  14. package/skills/alloy-guides/references/MODELS_ADVANCED.md +21 -482
  15. package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +12 -222
  16. package/skills/alloy-guides/references/VIEWS_STYLES.md +39 -358
  17. package/skills/alloy-guides/references/VIEWS_XML.md +36 -552
  18. package/skills/alloy-guides/references/WIDGETS.md +49 -127
  19. package/skills/alloy-howtos/SKILL.md +14 -169
  20. package/skills/alloy-howtos/references/best_practices.md +9 -113
  21. package/skills/alloy-howtos/references/cli_reference.md +18 -223
  22. package/skills/alloy-howtos/references/config_files.md +50 -133
  23. package/skills/alloy-howtos/references/debugging_troubleshooting.md +19 -63
  24. package/skills/alloy-howtos/references/samples.md +21 -138
  25. package/skills/ti-api/SKILL.md +10 -2
  26. package/skills/ti-api/references/api-android.md +36 -2
  27. package/skills/ti-api/references/api-app-platform.md +39 -3
  28. package/skills/ti-api/references/api-core.md +50 -18
  29. package/skills/ti-api/references/api-data-network.md +49 -35
  30. package/skills/ti-api/references/api-media.md +45 -27
  31. package/skills/ti-api/references/api-services.md +39 -9
  32. package/skills/ti-api/references/api-ui-android.md +33 -13
  33. package/skills/ti-api/references/api-ui-extras.md +41 -15
  34. package/skills/ti-api/references/api-ui-ios-animator.md +42 -26
  35. package/skills/ti-api/references/api-ui-ios.md +74 -2
  36. package/skills/ti-api/references/api-ui-lists.md +32 -16
  37. package/skills/ti-api/references/api-ui-text-input.md +34 -17
  38. package/skills/ti-api/references/api-ui-views.md +27 -1
  39. package/skills/ti-api/references/api-ui-windows-navigation.md +32 -18
  40. package/skills/ti-api/references/api-xml-global.md +66 -16
  41. package/skills/ti-create-release/SKILL.md +98 -0
  42. package/skills/ti-create-release/references/module-discovery.md +69 -0
  43. package/skills/ti-expert/references/adaptive-layouts.md +1 -1
  44. package/skills/ti-guides/SKILL.md +37 -76
  45. package/skills/ti-guides/references/advanced-data-and-images.md +122 -126
  46. package/skills/ti-guides/references/android-manifest.md +24 -83
  47. package/skills/ti-guides/references/app-distribution.md +31 -377
  48. package/skills/ti-guides/references/application-frameworks.md +127 -335
  49. package/skills/ti-guides/references/cli-reference.md +184 -633
  50. package/skills/ti-guides/references/commonjs-advanced.md +81 -231
  51. package/skills/ti-guides/references/compatibility-matrix.md +36 -75
  52. package/skills/ti-guides/references/hello-world.md +95 -70
  53. package/skills/ti-guides/references/hyperloop-native-access.md +52 -448
  54. package/skills/ti-guides/references/resources.md +174 -142
  55. package/skills/ti-guides/references/sdk-release-notes.md +28 -71
  56. package/skills/ti-guides/references/tiapp-config.md +222 -598
  57. package/skills/ti-howtos/SKILL.md +23 -123
  58. package/skills/ti-howtos/references/cross-platform-development.md +119 -324
  59. package/skills/ti-howtos/references/debugging-profiling.md +77 -445
  60. package/skills/ti-howtos/references/extending-titanium.md +199 -673
  61. package/skills/ti-howtos/references/local-data-sources.md +87 -300
  62. package/skills/ti-howtos/references/location-and-maps.md +86 -213
  63. package/skills/ti-howtos/references/media-apis.md +103 -223
  64. package/skills/ti-howtos/references/notification-services.md +86 -506
  65. package/skills/ti-howtos/references/remote-data-sources.md +97 -316
  66. package/skills/ti-howtos/references/using-modules.md +77 -133
  67. package/skills/ti-synthengine/SKILL.md +62 -111
  68. package/skills/ti-synthengine/assets/example/README.md +50 -59
  69. package/skills/ti-synthengine/assets/example/app.js +67 -65
  70. package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +39 -40
  71. package/skills/ti-synthengine/assets/example/lib/soundPreset.js +34 -0
  72. package/skills/ti-synthengine/assets/index.d.ts +122 -2
  73. package/skills/ti-synthengine/references/advanced-examples.md +4 -4
  74. package/skills/ti-synthengine/references/api.md +40 -18
  75. package/skills/ti-synthengine/references/audio-engine.md +15 -57
  76. package/skills/ti-synthengine/references/examples.md +63 -6
  77. package/skills/ti-synthengine/references/guide.md +61 -57
  78. package/skills/ti-synthengine/references/instruments-and-effects.md +15 -15
  79. package/skills/ti-synthengine/references/native-variation.md +53 -14
  80. package/skills/ti-synthengine/references/recipes-interaction.md +25 -20
  81. package/skills/ti-synthengine/references/recipes.md +19 -16
  82. package/skills/ti-synthengine/references/recommendations.md +12 -12
  83. package/skills/ti-synthengine/references/sound-api.md +197 -0
  84. package/skills/ti-synthengine/references/sound-design.md +7 -7
  85. package/skills/ti-synthengine/references/source-notes.md +62 -172
  86. package/skills/ti-synthengine/references/troubleshooting.md +17 -19
  87. package/skills/ti-synthengine/references/upgrade-2.0.0.md +40 -0
  88. package/skills/ti-ui/SKILL.md +28 -143
  89. package/skills/ti-ui/references/icons-and-splash-screens.md +74 -403
  90. package/skills/ti-ui/references/layouts-and-positioning.md +175 -402
  91. package/skills/ti-ui/references/listviews-and-performance.md +100 -703
  92. package/skills/ti-ui/references/platform-conventions.md +180 -0
  93. package/skills/ti-ui/references/user-interface.md +43 -0
  94. package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +0 -102
  95. package/skills/alloy-howtos/references/custom_tags.md +0 -148
  96. package/skills/ti-guides/references/coding-best-practices.md +0 -149
  97. package/skills/ti-guides/references/javascript-primer.md +0 -414
  98. package/skills/ti-guides/references/reserved-words.md +0 -36
  99. package/skills/ti-guides/references/style-and-conventions.md +0 -103
  100. package/skills/ti-howtos/references/android-platform-deep-dives.md +0 -624
  101. package/skills/ti-howtos/references/automation-fastlane-appium.md +0 -96
  102. package/skills/ti-howtos/references/buffer-codec-streams.md +0 -162
  103. package/skills/ti-howtos/references/google-maps-v2.md +0 -172
  104. package/skills/ti-howtos/references/ios-map-kit.md +0 -149
  105. package/skills/ti-howtos/references/ios-platform-deep-dives.md +0 -611
  106. package/skills/ti-howtos/references/tutorials.md +0 -565
  107. package/skills/ti-howtos/references/web-content-integration.md +0 -287
  108. package/skills/ti-howtos/references/webpack-build-pipeline.md +0 -124
  109. package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
  110. package/skills/ti-synthengine/references/android-sim80-correction.json +0 -162
  111. package/skills/ti-synthengine/references/audio-pipeline-validation.md +0 -19
  112. package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
  113. package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
  114. package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
  115. package/skills/ti-synthengine/references/frontier-physical-validation.json +0 -1918
  116. package/skills/ti-synthengine/references/native-tone-repetition-validation.md +0 -59
  117. package/skills/ti-synthengine/references/native-variation-proposal.md +0 -182
  118. package/skills/ti-synthengine/references/native-variation-validation.md +0 -63
  119. package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
  120. package/skills/ti-synthengine/references/performance-review.json +0 -1146
  121. package/skills/ti-synthengine/references/physical-validation.json +0 -1457
  122. package/skills/ti-synthengine/references/source-snapshot.json +0 -542
  123. package/skills/ti-synthengine/references/stats-performance.json +0 -2992
  124. package/skills/ti-synthengine/references/stats-performance.md +0 -82
  125. package/skills/ti-synthengine/references/studio-validation.json +0 -6202
  126. package/skills/ti-synthengine/references/unified-bypass-performance.json +0 -22425
  127. package/skills/ti-synthengine/references/unified-validation.json +0 -314
  128. package/skills/ti-ui/references/accessibility-deep-dive.md +0 -288
  129. package/skills/ti-ui/references/animation-and-matrices.md +0 -569
  130. package/skills/ti-ui/references/application-structures.md +0 -626
  131. package/skills/ti-ui/references/custom-fonts-styling.md +0 -549
  132. package/skills/ti-ui/references/event-handling.md +0 -401
  133. package/skills/ti-ui/references/gestures.md +0 -448
  134. package/skills/ti-ui/references/orientation.md +0 -374
  135. package/skills/ti-ui/references/platform-ui-android.md +0 -727
  136. package/skills/ti-ui/references/platform-ui-ios.md +0 -576
  137. package/skills/ti-ui/references/scrolling-views.md +0 -288
  138. package/skills/ti-ui/references/tableviews.md +0 -542
@@ -1,407 +1,61 @@
1
1
  # App distribution guide
2
2
 
3
- Guide for distributing Titanium apps to Google Play (Android) and the App Store (iOS).
3
+ ## Release prerequisites and identities
4
4
 
5
- <!-- TOC-START -->
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
- - [Android distribution](#android-distribution)
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
- <!-- TOC-END -->
9
+ ## Android: keystore, bundle and release track
38
10
 
39
- ## Android distribution
40
-
41
- ### 1. Generate keystore and certificate
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
- - `versionCode`: must be a 32-bit integer and increment for each update. No floating point values.
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
- ### 7. SD card installation
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
- <manifest android:installLocation="preferExternal"/>
23
+ <manifest android:versionCode="2" android:versionName="1.0.1"/>
126
24
  </android>
127
25
  ```
128
26
 
129
- Values: `preferExternal`, `auto`, `internalOnly`
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
- **What happens during the build:**
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
- ### 6. Upload to Mac App Store Connect
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
- 1. Open Xcode → Window → Organizer
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
- ### 7. Create app listing in App Store Connect
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
- 1. Go to [App Store Connect](https://appstoreconnect.apple.com)
319
- 2. **My Apps → + → New App**
320
- 3. Select **Mac** as platform
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
- ### 9. Common issues
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
- **Issue**: App crashes on launch
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
- ### 10. Versioning
46
+ Before submission verify:
380
47
 
381
- Update version numbers in `tiapp.xml`:
382
-
383
- ```xml
384
- <ti:app xmlns:ti="http://ti.tidev.io">
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
- - `version`: Display version (e.g., "1.0.0")
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
- ### 11. Testing on Mac
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
- Before submitting to Mac App Store:
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
- 1. Build with `macos` target for testing
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).