@maccesar/titools 3.2.0 → 4.0.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 (102) hide show
  1. package/README.md +27 -61
  2. package/lib/cleanup.js +29 -0
  3. package/lib/commands/agents.js +8 -7
  4. package/lib/commands/skills.js +118 -23
  5. package/lib/config.js +13 -15
  6. package/lib/installer.js +5 -3
  7. package/lib/utils.js +36 -0
  8. package/package.json +1 -1
  9. package/skills/alloy-guides/SKILL.md +188 -0
  10. package/skills/alloy-guides/references/CLI_TASKS.md +233 -0
  11. package/skills/alloy-guides/references/CONCEPTS.md +171 -0
  12. package/skills/alloy-guides/references/CONTROLLERS.md +279 -0
  13. package/skills/alloy-guides/references/MODELS.md +742 -0
  14. package/skills/alloy-guides/references/MODELS_ADVANCED.md +482 -0
  15. package/skills/alloy-guides/references/PURGETSS.md +57 -0
  16. package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +235 -0
  17. package/skills/alloy-guides/references/VIEWS_STYLES.md +375 -0
  18. package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +102 -0
  19. package/skills/alloy-guides/references/VIEWS_XML.md +581 -0
  20. package/skills/alloy-guides/references/WIDGETS.md +160 -0
  21. package/skills/alloy-howtos/SKILL.md +179 -0
  22. package/skills/alloy-howtos/references/best_practices.md +121 -0
  23. package/skills/alloy-howtos/references/cli_reference.md +230 -0
  24. package/skills/alloy-howtos/references/config_files.md +158 -0
  25. package/skills/alloy-howtos/references/custom_tags.md +148 -0
  26. package/skills/alloy-howtos/references/debugging_troubleshooting.md +78 -0
  27. package/skills/alloy-howtos/references/samples.md +156 -0
  28. package/skills/purgetss/SKILL.md +184 -181
  29. package/skills/purgetss/references/EXAMPLES.md +8 -6
  30. package/skills/purgetss/references/app-branding.md +5 -0
  31. package/skills/purgetss/references/apply-directive.md +1 -1
  32. package/skills/purgetss/references/class-categories.md +1 -1
  33. package/skills/purgetss/references/class-index-properties.md +618 -0
  34. package/skills/purgetss/references/class-index.md +4 -610
  35. package/skills/purgetss/references/cli-commands.md +41 -410
  36. package/skills/purgetss/references/custom-fonts.md +292 -0
  37. package/skills/purgetss/references/custom-rules.md +1 -1
  38. package/skills/purgetss/references/customization-deep-dive.md +64 -1
  39. package/skills/purgetss/references/icon-fonts.md +208 -118
  40. package/skills/purgetss/references/installation-setup.md +4 -4
  41. package/skills/purgetss/references/migration-guide.md +53 -1
  42. package/skills/purgetss/references/multi-density-images.md +53 -2
  43. package/skills/purgetss/references/svg-pipeline.md +249 -0
  44. package/skills/purgetss/references/tikit-components.md +2 -2
  45. package/skills/purgetss/references/titanium-resets.md +2 -2
  46. package/skills/purgetss/references/ui-ux-design.md +7 -5
  47. package/skills/purgetss/references/version-history.md +71 -82
  48. package/skills/ti-api/SKILL.md +128 -0
  49. package/skills/ti-api/references/api-android.md +675 -0
  50. package/skills/ti-api/references/api-app-platform.md +636 -0
  51. package/skills/ti-api/references/api-core.md +764 -0
  52. package/skills/ti-api/references/api-data-network.md +641 -0
  53. package/skills/ti-api/references/api-media.md +655 -0
  54. package/skills/ti-api/references/api-modules-ble-bluetooth.md +657 -0
  55. package/skills/ti-api/references/api-modules-coremotion-urlsession.md +411 -0
  56. package/skills/ti-api/references/api-modules-map.md +632 -0
  57. package/skills/ti-api/references/api-modules-nfc.md +725 -0
  58. package/skills/ti-api/references/api-modules-social-misc.md +526 -0
  59. package/skills/ti-api/references/api-services.md +700 -0
  60. package/skills/ti-api/references/api-ui-android.md +499 -0
  61. package/skills/ti-api/references/api-ui-extras.md +702 -0
  62. package/skills/ti-api/references/api-ui-ios-animator.md +378 -0
  63. package/skills/ti-api/references/api-ui-ios.md +756 -0
  64. package/skills/ti-api/references/api-ui-lists.md +581 -0
  65. package/skills/ti-api/references/api-ui-text-input.md +607 -0
  66. package/skills/ti-api/references/api-ui-views.md +572 -0
  67. package/skills/ti-api/references/api-ui-windows-navigation.md +676 -0
  68. package/skills/ti-api/references/api-xml-global.md +743 -0
  69. package/skills/ti-guides/SKILL.md +82 -0
  70. package/skills/ti-guides/references/advanced-data-and-images.md +155 -0
  71. package/skills/ti-guides/references/android-manifest.md +97 -0
  72. package/skills/ti-guides/references/app-distribution.md +373 -0
  73. package/skills/ti-guides/references/application-frameworks.md +366 -0
  74. package/skills/ti-guides/references/cli-reference.md +700 -0
  75. package/skills/ti-guides/references/coding-best-practices.md +150 -0
  76. package/skills/ti-guides/references/commonjs-advanced.md +279 -0
  77. package/skills/ti-guides/references/hello-world.md +99 -0
  78. package/skills/ti-guides/references/hyperloop-native-access.md +458 -0
  79. package/skills/ti-guides/references/javascript-primer.md +402 -0
  80. package/skills/ti-guides/references/reserved-words.md +36 -0
  81. package/skills/ti-guides/references/resources.md +172 -0
  82. package/skills/ti-guides/references/style-and-conventions.md +104 -0
  83. package/skills/ti-guides/references/tiapp-config.md +655 -0
  84. package/skills/ti-howtos/SKILL.md +131 -0
  85. package/skills/ti-howtos/references/android-platform-deep-dives.md +609 -0
  86. package/skills/ti-howtos/references/automation-fastlane-appium.md +96 -0
  87. package/skills/ti-howtos/references/buffer-codec-streams.md +162 -0
  88. package/skills/ti-howtos/references/cross-platform-development.md +358 -0
  89. package/skills/ti-howtos/references/debugging-profiling.md +473 -0
  90. package/skills/ti-howtos/references/extending-titanium.md +684 -0
  91. package/skills/ti-howtos/references/google-maps-v2.md +172 -0
  92. package/skills/ti-howtos/references/ios-map-kit.md +149 -0
  93. package/skills/ti-howtos/references/ios-platform-deep-dives.md +595 -0
  94. package/skills/ti-howtos/references/local-data-sources.md +310 -0
  95. package/skills/ti-howtos/references/location-and-maps.md +267 -0
  96. package/skills/ti-howtos/references/media-apis.md +268 -0
  97. package/skills/ti-howtos/references/notification-services.md +539 -0
  98. package/skills/ti-howtos/references/remote-data-sources.md +339 -0
  99. package/skills/ti-howtos/references/tutorials.md +552 -0
  100. package/skills/ti-howtos/references/using-modules.md +182 -0
  101. package/skills/ti-howtos/references/web-content-integration.md +288 -0
  102. package/skills/ti-howtos/references/webpack-build-pipeline.md +125 -0
@@ -0,0 +1,655 @@
1
+ # tiapp.xml and timodule.xml configuration
2
+
3
+ Reference for Titanium app configuration files. `tiapp.xml` is the main config file for Titanium apps. `timodule.xml` is for custom modules.
4
+
5
+ ## tiapp.xml structure
6
+
7
+ ```xml
8
+ <ti:app xmlns:ti="http://ti.tidev.io">
9
+ <id>com.titaniumsdk.helloWorld</id>
10
+ <name>helloWorld</name>
11
+ <version>1.0.1</version>
12
+ <icon>appicon.png</icon>
13
+ <fullscreen>false</fullscreen>
14
+ <navbar-hidden>false</navbar-hidden>
15
+ <analytics>false</analytics>
16
+ <guid>GUID</guid>
17
+ <ios>
18
+ <plist>
19
+ <dict>
20
+ <key>UISupportedInterfaceOrientations~iphone</key>
21
+ <array>
22
+ <string>UIInterfaceOrientationPortrait</string>
23
+ </array>
24
+ <key>UISupportedInterfaceOrientations~ipad</key>
25
+ <array>
26
+ <string>UIInterfaceOrientationPortrait</string>
27
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
28
+ <string>UIInterfaceOrientationLandscapeLeft</string>
29
+ <string>UIInterfaceOrientationLandscapeRight</string>
30
+ </array>
31
+ </dict>
32
+ </plist>
33
+ </ios>
34
+ <android xmlns:android="http://schemas.android.com/apk/res/android">
35
+ <tool-api-level>10</tool-api-level>
36
+ <abi>all</abi>
37
+ </android>
38
+ <modules/>
39
+ </ti:app>
40
+ ```
41
+
42
+ tiapp.xml properties are encrypted when building for production.
43
+
44
+ ---
45
+
46
+ ## Top-level elements
47
+
48
+ ### Required elements
49
+
50
+ #### `<guid>`
51
+
52
+ Required. Unique ID generated by the CLI. Do not modify unless you know why.
53
+
54
+ #### `<id>`
55
+
56
+ Required. Application ID.
57
+
58
+ - Android: package ID following Java package naming standards
59
+ - iOS: must match Bundle ID from Apple Developer Portal
60
+
61
+ ```xml
62
+ <id>com.mycompany.fakeblock</id>
63
+ ```
64
+
65
+ #### `<name>`
66
+
67
+ Required. Application name shown under the icon on device.
68
+
69
+ ```xml
70
+ <name>Fakeblock</name>
71
+ ```
72
+
73
+ Android warning: if the name starts with a digit, prefix the activity name with an underscore (for example, `_2Foo`).
74
+
75
+ ### Optional elements
76
+
77
+ #### `<defaultLang>`
78
+
79
+ Sets the default language for Android i18n `strings.xml`. Android defaults to `en`. If you only use a single non-English i18n file, set this to that language.
80
+
81
+ ```xml
82
+ <defaultLang>de</defaultLang>
83
+ ```
84
+
85
+ #### `<copyright>`
86
+
87
+ Application copyright.
88
+
89
+ #### `<description>`
90
+
91
+ Application description.
92
+
93
+ ```xml
94
+ <description>Tap to rock out with this block.</description>
95
+ ```
96
+
97
+ #### `<fullscreen>`
98
+
99
+ Start the app in fullscreen (hides the status bar).
100
+
101
+ ```xml
102
+ <fullscreen>false</fullscreen> <!-- default -->
103
+ ```
104
+
105
+ #### `<icon>`
106
+
107
+ Icon filename relative to `Resources/` or a platform-specific folder.
108
+
109
+ ```xml
110
+ <icon>appicon.png</icon>
111
+ ```
112
+
113
+ #### `<navbar-hidden>`
114
+
115
+ Hide the navigation bar.
116
+
117
+ ```xml
118
+ <navbar-hidden>false</navbar-hidden> <!-- default -->
119
+ ```
120
+
121
+ Android: removes the top action/title bar.
122
+
123
+ #### `<publisher>`
124
+
125
+ Application publisher.
126
+
127
+ ```xml
128
+ <publisher>Bluth Company</publisher>
129
+ ```
130
+
131
+ #### `<statusbar-hidden>`
132
+
133
+ Android only. Hide the status bar.
134
+
135
+ ```xml
136
+ <statusbar-hidden>false</statusbar-hidden> <!-- default -->
137
+ ```
138
+
139
+ #### `<url>`
140
+
141
+ Application URL.
142
+
143
+ ```xml
144
+ <url>http://www.bluthcompany.com/fakeblock</url>
145
+ ```
146
+
147
+ #### `<version>`
148
+
149
+ Application version.
150
+
151
+ ```xml
152
+ <version>3.1.4</version>
153
+ ```
154
+
155
+ iOS: truncated to 3 dot-separated numbers (for example, `2.1.0.1` becomes `2.1.0`).
156
+
157
+ #### `<sdk-version>`
158
+
159
+ Titanium SDK to build against.
160
+
161
+ ```xml
162
+ <sdk-version>11.1.0.GA</sdk-version>
163
+ ```
164
+
165
+ #### `<deployment-targets>`
166
+
167
+ IDE deployment menu options.
168
+
169
+ ```xml
170
+ <deployment-targets>
171
+ <target device="android">true</target>
172
+ <target device="ipad">false</target>
173
+ <target device="iphone">false</target>
174
+ </deployment-targets>
175
+ ```
176
+
177
+ #### `<modules>`
178
+
179
+ Include Titanium modules.
180
+
181
+ ```xml
182
+ <modules>
183
+ <module>ti.map</module>
184
+ <module platform="android">ti.map</module>
185
+ <module platform="ios">ti.map</module>
186
+ <module version="2.0.0">ti.alloy</module>
187
+ <module deploy-type="production">ti.analytics</module>
188
+ </modules>
189
+ ```
190
+
191
+ Attributes:
192
+ - `platform`: `android`, `commonjs`, `iphone`
193
+ - `version`: specific module version
194
+ - `deploy-type`: `development`, `test`, `production` (comma-separated)
195
+
196
+ #### `<plugins>`
197
+
198
+ Include plugins (in the `plugins/` folder).
199
+
200
+ ```xml
201
+ <plugins>
202
+ <plugin version="1.0">ti.alloy</plugin>
203
+ </plugins>
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Application properties
209
+
210
+ Custom properties accessible via `Titanium.App.Properties`. Read-only in production.
211
+
212
+ ```xml
213
+ <property name="name" type="type">value</property>
214
+ ```
215
+
216
+ Types: `string`, `bool`, `int`, `double`
217
+
218
+ ### Special properties
219
+
220
+ #### `ti.ui.defaultunit`
221
+
222
+ Default unit for sizes/positions.
223
+
224
+ ```xml
225
+ <property name="ti.ui.defaultunit">system</property>
226
+ ```
227
+
228
+ Values: `system`, `cm`, `dip`/`dp`, `in`, `mm`, `px`
229
+
230
+ #### `run-on-main-thread`
231
+
232
+ Since 5.1.0. Run all JavaScript on the main thread instead of a secondary thread. Disabled by default in existing projects, enabled in new projects. Enabled automatically in SDK 7.0.0+.
233
+
234
+ ```xml
235
+ <property name="run-on-main-thread" type="bool">true</property>
236
+ ```
237
+
238
+ #### `allow-custom-keyboards`
239
+
240
+ Since 6.1.0. Allow or disallow custom iOS 8+ keyboard extensions. Custom keyboards are allowed by default. Set to `false` to disallow them.
241
+
242
+ ```xml
243
+ <property name="allow-custom-keyboards" type="bool">false</property>
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Android section
249
+
250
+ ```xml
251
+ <android xmlns:android="http://schemas.android.com/apk/res/android">
252
+ <abi>all</abi>
253
+ <activities>
254
+ <activity url="activity.js"/>
255
+ </activities>
256
+ <services>
257
+ <service url="service.js" type="standard"/>
258
+ </services>
259
+ <manifest>
260
+ <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"/>
261
+ <application>
262
+ <activity>...</activity>
263
+ <service>...</service>
264
+ </application>
265
+ </manifest>
266
+ </android>
267
+ ```
268
+
269
+ ### Elements
270
+
271
+ #### `<abi>`
272
+
273
+ Target ABI architecture (V8 runtime only).
274
+
275
+ ```xml
276
+ <abi>all</abi> <!-- default -->
277
+ ```
278
+
279
+ Values: `all`, `arm64-v8a`, `armeabi-v7a`, `x86`, `x86_64`
280
+
281
+ Targeting specific ABIs reduces APK size but also reduces device compatibility.
282
+
283
+ #### `<activities>`
284
+
285
+ Custom JavaScript-based Android activities.
286
+
287
+ ```xml
288
+ <activities>
289
+ <activity url="activity.js">
290
+ <!-- Android Manifest elements -->
291
+ </activity>
292
+ </activities>
293
+ ```
294
+
295
+ #### `<services>`
296
+
297
+ Custom JavaScript-based Android services (background processes).
298
+
299
+ ```xml
300
+ <services>
301
+ <service url="service.js" type="standard"/>
302
+ </services>
303
+ ```
304
+
305
+ #### `<manifest>`
306
+
307
+ Ad-hoc AndroidManifest.xml elements.
308
+
309
+ Set target/minimum SDK:
310
+ ```xml
311
+ <android xmlns:android="http://schemas.android.com/apk/res/android">
312
+ <manifest>
313
+ <!-- Target Android 10.0, min Android 5.0 -->
314
+ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
315
+ </manifest>
316
+ </android>
317
+ ```
318
+
319
+ Screen density support:
320
+ ```xml
321
+ <manifest>
322
+ <supports-screens
323
+ android:smallScreens="true"
324
+ android:normalScreens="true"
325
+ android:largeScreens="true"
326
+ android:xlargeScreens="true"
327
+ />
328
+ </manifest>
329
+ ```
330
+
331
+ Do not set `android:anyDensity="false"`.
332
+
333
+ Enable debugging:
334
+ ```xml
335
+ <manifest>
336
+ <application android:debuggable="true" />
337
+ </manifest>
338
+ ```
339
+
340
+ Install location:
341
+ ```xml
342
+ <manifest android:installLocation="preferExternal">
343
+ <uses-sdk android:minSdkVersion="7" />
344
+ </manifest>
345
+ ```
346
+
347
+ Values: `preferExternal`, `auto`, `internalOnly`
348
+
349
+ Request large heap:
350
+ ```xml
351
+ <manifest>
352
+ <application android:largeHeap="true"/>
353
+ </manifest>
354
+ ```
355
+
356
+ ### Android-specific properties
357
+
358
+ | Property | Type | Default | Description |
359
+ | -------------------------------------- | ------ | ------- | ------------------------------------------ |
360
+ | `ti.android.shake.factor` | double | 1.3 | Shake event sensitivity |
361
+ | `ti.android.shake.quiet.milliseconds` | int | 500 | Quiet time before shake event |
362
+ | `ti.android.shake.active.milliseconds` | int | 1000 | Active time for shake event |
363
+ | `ti.android.httpclient.maxbuffersize` | int | 524288 | HTTP response buffer size (bytes) |
364
+ | `ti.android.compilejs` | bool | - | Enable JS compilation (default: dist only) |
365
+ | `ti.android.debug` | bool | false | Enable detailed logging |
366
+
367
+ ```xml
368
+ <property name="ti.android.fastdev">false</property>
369
+ ```
370
+
371
+ ---
372
+
373
+ ## iOS section
374
+
375
+ ```xml
376
+ <ti:app>
377
+ <ios>
378
+ <team-id>YOUR_TEAM_ID</team-id>
379
+ <entitlements>
380
+ <dict>
381
+ <key>com.apple.security.application-groups</key>
382
+ <array>
383
+ <string>group.com.titaniumsdk.mycoolapp</string>
384
+ </array>
385
+ </dict>
386
+ </entitlements>
387
+ <extensions>
388
+ ...
389
+ </extensions>
390
+ <plist>
391
+ <dict>
392
+ <!-- Info.plist entries -->
393
+ </dict>
394
+ </plist>
395
+ <use-autolayout>true</use-autolayout>
396
+ <min-ios-ver>9.0</min-ios-ver>
397
+ </ios>
398
+ </ti:app>
399
+ ```
400
+
401
+ ### Elements
402
+
403
+ #### `<team-id>`
404
+
405
+ Since 5.0.0. Required for app extensions (share, watch, Siri).
406
+
407
+ ```xml
408
+ <team-id>YOUR_TEAM_ID</team-id>
409
+ ```
410
+
411
+ #### `<entitlements>`
412
+
413
+ Since 6.1.0. Target entitlements (merged with internal entitlements).
414
+
415
+ ```xml
416
+ <entitlements>
417
+ <dict>
418
+ <key>com.apple.security.application-groups</key>
419
+ <array>
420
+ <string>group.com.titaniumsdk.mycoolapp</string>
421
+ </array>
422
+ </dict>
423
+ </entitlements>
424
+ ```
425
+
426
+ #### `<extensions>`
427
+
428
+ Since 5.0.0. iOS extensions.
429
+
430
+ ```xml
431
+ <extensions>
432
+ <extension projectPath="extensions/foo/foo.xcodeproj">
433
+ <target name="foo WatchApp Extension">
434
+ <provisioning-profiles>
435
+ <devices/>
436
+ <dist-appstore/>
437
+ <dist-adhoc/>
438
+ </provisioning-profiles>
439
+ </target>
440
+ </extension>
441
+ </extensions>
442
+ ```
443
+
444
+ #### `<min-ios-ver>`
445
+
446
+ Minimum iOS version.
447
+
448
+ ```xml
449
+ <min-ios-ver>9.0</min-ios-ver> <!-- default -->
450
+ ```
451
+
452
+ #### `<min-sdk-ver>`
453
+
454
+ Minimum Xcode version.
455
+
456
+ ```xml
457
+ <min-sdk-ver>9.0</min-sdk-ver> <!-- default -->
458
+ ```
459
+
460
+ #### `<plist>`
461
+
462
+ Settings for generated `Info.plist`. Uses key/value pairs.
463
+
464
+ Orientations:
465
+ ```xml
466
+ <plist>
467
+ <dict>
468
+ <key>UISupportedInterfaceOrientations~iphone</key>
469
+ <array>
470
+ <string>UIInterfaceOrientationPortrait</string>
471
+ </array>
472
+ <key>UISupportedInterfaceOrientations~ipad</key>
473
+ <array>
474
+ <string>UIInterfaceOrientationPortrait</string>
475
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
476
+ <string>UIInterfaceOrientationLandscapeLeft</string>
477
+ <string>UIInterfaceOrientationLandscapeRight</string>
478
+ </array>
479
+ </dict>
480
+ </plist>
481
+ ```
482
+
483
+ Background modes:
484
+ ```xml
485
+ <plist>
486
+ <dict>
487
+ <key>UIBackgroundModes</key>
488
+ <array>
489
+ <string>audio</string>
490
+ <string>location</string>
491
+ <string>voip</string>
492
+ <string>newsstand-content</string>
493
+ <string>external-accessory</string>
494
+ <string>bluetooth-central</string>
495
+ <string>bluetooth-peripheral</string>
496
+ </array>
497
+ </dict>
498
+ </plist>
499
+ ```
500
+
501
+ Device capabilities:
502
+ ```xml
503
+ <plist>
504
+ <dict>
505
+ <key>UIRequiredDeviceCapabilities</key>
506
+ <array>
507
+ <string>telephony</string>
508
+ <string>wifi</string>
509
+ <string>sms</string>
510
+ <string>still-camera</string>
511
+ <string>auto-focus-camera</string>
512
+ <string>front-facing-camera</string>
513
+ <string>camera-flash</string>
514
+ <string>video-camera</string>
515
+ <string>accelerometer</string>
516
+ <string>gyroscope</string>
517
+ <string>location-services</string>
518
+ <string>gps</string>
519
+ <string>magnetometer</string>
520
+ <string>gamekit</string>
521
+ <string>microphone</string>
522
+ <string>opengles-1</string>
523
+ <string>opengles-2</string>
524
+ <string>armv6</string>
525
+ <string>armv7</string>
526
+ <string>peer-peer</string>
527
+ <string>bluetooth-le</string>
528
+ </array>
529
+ </dict>
530
+ </plist>
531
+ ```
532
+
533
+ Persistent WiFi:
534
+ ```xml
535
+ <key>UIRequiresPersistentWiFi</key><true/>
536
+ ```
537
+
538
+ Status bar style:
539
+ ```xml
540
+ <key>UIStatusBarStyle</key><string>UIStatusBarStyleBlackTranslucent</string>
541
+ ```
542
+
543
+ iOS 9 URL schemes:
544
+ ```xml
545
+ <key>LSApplicationQueriesSchemes</key>
546
+ <array>
547
+ <string>fbapi</string>
548
+ <string>fbauth2</string>
549
+ <string>twitter</string>
550
+ <string>whatsapp</string>
551
+ <string>instagram</string>
552
+ <string>comgooglemaps</string>
553
+ </array>
554
+ ```
555
+
556
+ #### `<use-app-thinning>`
557
+
558
+ Since 5.1.0. Enable App Thinning with Asset Catalog.
559
+
560
+ ```xml
561
+ <use-app-thinning>true</use-app-thinning>
562
+ ```
563
+
564
+ Use `Ti.Filesystem.getAsset()` to read images from Asset Catalog.
565
+
566
+ #### `<use-autolayout>`
567
+
568
+ Since 5.1.0. Enable iOS auto-layout engine.
569
+
570
+ ```xml
571
+ <use-autolayout>true</use-autolayout>
572
+ ```
573
+
574
+ #### `<log-server-port>`
575
+
576
+ Since 6.0.0. Custom log server port.
577
+
578
+ ```xml
579
+ <log-server-port>27973</log-server-port>
580
+ ```
581
+
582
+ ### Unsupported Info.plist keys
583
+
584
+ These are auto-generated by Titanium and cannot be overridden:
585
+ - `CFBundleDisplayName`
586
+ - `CFBundleExecutable`
587
+ - `CFBundleIconFile`
588
+ - `CFBundleIconFiles`
589
+ - `CFBundleIdentifier`
590
+ - `CFBundleInfoDictionaryVersion`
591
+ - `CFBundleName`
592
+ - `CFBundlePackageType`
593
+ - `CFBundleSignature`
594
+ - `CFBundleVersion` (pre-4.1.0)
595
+ - `CFBundleShortVersionString` (pre-4.1.0)
596
+
597
+ ---
598
+
599
+ ## Google Play Services
600
+
601
+ Since 9.0.0. Automatic validation of Google Play Services. Disable if needed:
602
+
603
+ ```xml
604
+ <property name="ti.playservices.validate.on.startup" type="bool">false</property>
605
+ ```
606
+
607
+ ---
608
+
609
+ ## timodule.xml (module configuration)
610
+
611
+ Used in custom Titanium modules. Follows the same structure as `tiapp.xml` but only contains platform-specific config (mainly Android).
612
+
613
+ Supports token substitution for app-specific values:
614
+
615
+ ```xml
616
+ <!-- timodule.xml -->
617
+ <android xmlns:android="http://schemas.android.com/apk/res/android">
618
+ <manifest>
619
+ <permission android:name="${tiapp.properties['id']}.permission.MY_NEW_PERMISSION"
620
+ android:protectionLevel="signature" />
621
+ </manifest>
622
+ </android>
623
+ ```
624
+
625
+ Becomes (for app with ID `com.example.app`):
626
+
627
+ ```xml
628
+ <permission android:name="com.example.app.permission.MY_NEW_PERMISSION"
629
+ android:protectionLevel="signature" />
630
+ ```
631
+
632
+ Access properties:
633
+ - `${tiapp.properties['id']}`: app ID
634
+ - `${tiapp.properties['name']}`: app name
635
+ - `${tiapp.properties['version']}`: app version
636
+ - `${tiapp.properties['publisher']}`: publisher
637
+
638
+ ---
639
+
640
+ ## SDK version precedence
641
+
642
+ The CLI checks SDK version in this order:
643
+
644
+ 1. `tiapp.xml` `<sdk-version>` tag
645
+ 2. `--sdk` CLI option
646
+ 3. `app.sdk` config setting (`ti config app.sdk <version>`)
647
+ 4. Selected SDK (`ti sdk select`)
648
+
649
+ ---
650
+
651
+ ## References
652
+
653
+ - Android Manifest docs: http://developer.android.com/guide/topics/manifest/manifest-intro.html
654
+ - iOS Info.plist Key Reference: http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
655
+ - Java package naming: http://download.oracle.com/javase/tutorial/java/package/namingpkgs.html