Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(ios) handle Apple privacy manifest changes #14007

Merged
merged 1 commit into from Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 4 additions & 5 deletions apidoc/Titanium/App/Properties/Properties.yml
Expand Up @@ -21,10 +21,10 @@ description: |
Then, you can retrieve the property during runtime with the following API call:

``` js
var foo = Ti.App.Properties.getString('foo');
const foo = Ti.App.Properties.getString('foo');
```

As of Release 3.2.0, any application properties defined in the `tiapp.xml` file are stored in the
Any application properties defined in the `tiapp.xml` file are stored in the
device's secure storage, making them read-only. Additionally, external access to these
properties is now restricted. Other iOS applications cannot access these properties and
native Android modules must use the Titanium module API TiApplication.getAppProperties()
Expand All @@ -33,9 +33,8 @@ description: |
If you need to change the values during runtime, initially create the property with these APIs
rather than defining them in the `tiapp.xml` file.

Prior to Release 3.2.0, application properties defined in the `tiapp.xml` file could be
overwritten by these APIs and accessed externally by other applications and modules.

**Important**: Using this API in the Apple ecosystem requires the `NSPrivacyAccessedAPICategoryUserDefaults`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
extends: Titanium.Module
since: "0.5"

Expand Down
3 changes: 3 additions & 0 deletions apidoc/Titanium/App/iOS/UserDefaults.yml
Expand Up @@ -4,6 +4,9 @@ summary: |
The UserDefaults module is used for storing application-related data in property/value pairs
that persist beyond application sessions and device power cycles. UserDefaults allows the suiteName
of the UserDefaults to be specified at creation time.

**Important**: Using this API requires the `NSPrivacyAccessedAPICategoryUserDefaults` property set in the
privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
description: |
Unlike Titanium.App.Properties, Titanium.App.iOS.UserDefaults does not pull properties defined in the `tiapp.xml` file.

Expand Down
9 changes: 9 additions & 0 deletions apidoc/Titanium/Filesystem/File.yml
Expand Up @@ -165,6 +165,9 @@ methods:
summary: Returns the creation Date for the file identified by this file object.
description: |
On Android, returns a Date whose `getTime()` value is 0 for resource files.

**Important**: When developing for the Apple ecosystem, using this API requires the `NSPrivacyAccessedAPICategoryFileTimestamp`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
returns:
type: Date
platforms: [iphone, ipad, android, macos]
Expand Down Expand Up @@ -255,6 +258,9 @@ methods:
summary: Returns the last modification Date for the file identified by this file object.
description: |
On Android, returns a Date whose `getTime()` value is 0 for resource files.

**Important**: When developing for the Apple ecosystem, using this API requires the `NSPrivacyAccessedAPICategoryFileTimestamp`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
returns:
type: Date
platforms: [iphone, ipad, android, macos]
Expand Down Expand Up @@ -346,6 +352,9 @@ methods:
identified by this file object is stored.
description: |
Free space is returned in bytes.

**Important**: When developing for the Apple ecosystem, using this API requires the `NSPrivacyAccessedAPICategoryDiskSpace`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
returns:
type: Number

Expand Down
3 changes: 3 additions & 0 deletions apidoc/Titanium/Platform/Platform.yml
Expand Up @@ -392,6 +392,9 @@ properties:

- name: uptime
summary: System uptime since last boot in seconds.
description: |
**Important**: When developing for the Apple ecosystem, using this API requires the `NSPrivacyAccessedAPICategorySystemBootTime`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).
type: Number
permission: read-only
platforms: [android, iphone, ipad, macos]
Expand Down
2 changes: 2 additions & 0 deletions iphone/Classes/PlatformModule.m
Expand Up @@ -223,10 +223,12 @@ - (NSString *)macaddress
}
GETTER_IMPL(NSString *, macaddress, Macaddress);

#ifdef USE_TI_PLATFORMUPTIME
- (NSNumber *)uptime
{
return [NSNumber numberWithDouble:[[NSProcessInfo processInfo] systemUptime]];
}
#endif

- (NSString *)identifierForVendor
{
Expand Down
8 changes: 4 additions & 4 deletions iphone/Classes/TiFilesystemBlobProxy.m
Expand Up @@ -95,8 +95,8 @@ -(id)name \

- (NSDate *)createTimestamp:(id)unused
{
DEPRECATED_REPLACED(@"Filesystem.File.createTimestamp()", @"7.3.0", @"Filesystem.File.createdAt()");
return [self createdAt:unused];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.Blob.createTimestamp()", @"7.3.0", @"12.4.0", @"Filesystem.File.createdAt()");
return [NSDate new];
}

- (NSDate *)createdAt:(id)unused
Expand All @@ -106,8 +106,8 @@ - (NSDate *)createdAt:(id)unused

- (NSDate *)modificationTimestamp:(id)unused
{
DEPRECATED_REPLACED(@"Filesystem.File.modificationTimestamp()", @"7.3.0", @"Filesystem.File.modifiedAt()");
return [self modifiedAt:nil];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.File.modificationTimestamp()", @"7.3.0", @"12.4.0", @"Filesystem.File.modifiedAt()");
return [NSDate new];
}

- (NSDate *)modifiedAt:(id)unused
Expand Down
Expand Up @@ -58,16 +58,17 @@ - (NSNumber *)readonly

- (NSDate *)createTimestamp
{
DEPRECATED_REPLACED(@"Filesystem.File.createTimestamp", @"7.3.0", @"Filesystem.File.createdAt()");
return [self createdAt:nil];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.File.createTimestamp", @"7.3.0", @"12.4.0", @"Filesystem.File.createdAt()");
return [NSDate new];
}

- (NSDate *)createTimestamp:(id)unused
{
DEPRECATED_REPLACED(@"Filesystem.File.createTimestamp()", @"7.3.0", @"Filesystem.File.createdAt()");
return [self createdAt:unused];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.File.createTimestamp()", @"7.3.0", @"12.4.0", @"Filesystem.File.createdAt()");
return [NSDate new];
}

#ifdef USE_TI_FILESYSTEMCREATEDAT
- (NSDate *)createdAt:(id)unused
{
NSError *error = nil;
Expand All @@ -82,19 +83,21 @@ - (NSDate *)createdAt:(id)unused
}
return result;
}
#endif

- (NSDate *)modificationTimestamp
{
DEPRECATED_REPLACED(@"Filesystem.File.modificationTimestamp", @"7.3.0", @"Filesystem.File.modifiedAt()");
return [self modifiedAt:nil];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.File.modificationTimestamp", @"7.3.0", @"12.4.0", @"Filesystem.File.modifiedAt()");
return [NSDate new];
}

- (NSDate *)modificationTimestamp:(id)unused
{
DEPRECATED_REPLACED(@"Filesystem.File.modificationTimestamp()", @"7.3.0", @"Filesystem.File.modifiedAt()");
return [self modifiedAt:nil];
DEPRECATED_REPLACED_REMOVED(@"Filesystem.File.modificationTimestamp()", @"7.3.0", @"12.4.0", @"Filesystem.File.modifiedAt()");
return [NSDate new];
}

#ifdef USE_TI_FILESYSTEMMODIFIEDAT
- (NSDate *)modifiedAt:(id)unused
{
NSError *error = nil;
Expand All @@ -104,6 +107,7 @@ - (NSDate *)modifiedAt:(id)unused
}
return [resultDict objectForKey:NSFileModificationDate];
}
#endif

- (NSNumber *)symbolicLink
{
Expand Down Expand Up @@ -147,6 +151,7 @@ - (NSArray *)getDirectoryListing:(id)args
return resultArray;
}

#ifdef USE_TI_FILESYSTEMSPACEAVAILABLE
- (NSNumber *)spaceAvailable:(id)unused
{
NSError *error = nil;
Expand All @@ -157,6 +162,7 @@ - (NSNumber *)spaceAvailable:(id)unused
}
return [resultDict objectForKey:NSFileSystemFreeSize];
}
#endif

- (NSString *)getProtectionKey:(id)args
{
Expand Down
2 changes: 1 addition & 1 deletion iphone/iphone/project.xcconfig
@@ -1,5 +1,5 @@
TI_VERSION=0.0.0
JSCORE_LD_FLAGS=-weak_framework JavaScriptCore
GCC_DEFINITIONS=
TI_SYMBOL_MACROS=USE_JSCORE_FRAMEWORK USE_TI_STREAM USE_TI_CODEC USE_TI_UTILS USE_TI_XML USE_TI_ACCELEROMETER USE_TI_API USE_TI_APP USE_TI_APPTRACKUSERINTERACTION USE_TI_CALENDAR USE_TI_CONTACTS USE_TI_DATABASE USE_TI_FILESYSTEM USE_TI_GEOLOCATION USE_TI_GESTURE USE_TI_MEDIA USE_TI_NETWORK USE_TI_NETWORKSOCKET USE_TI_PLATFORM USE_TI_PLATFORMIDENTIFIERFORADVERTISING USE_TI_PLATFORMGETIDENTIFIERFORADVERTISING USE_TI_WATCHSESSION USE_TI_UI USE_TI_UITAB USE_TI_UILABEL USE_TI_UIBUTTON USE_TI_UIPROGRESSBAR USE_TI_UISEARCHBAR USE_TI_UIACTIVITYINDICATOR USE_TI_UIOPTIONBAR USE_TI_UISLIDER USE_TI_UISWITCH USE_TI_UIPICKER USE_TI_UITEXTAREA USE_TI_UITEXTFIELD USE_TI_UIIMAGEVIEW USE_TI_UIMASKEDIMAGE USE_TI_UIWEBVIEW USE_TI_UIWINDOW USE_TI_UIVIEW USE_TI_UIOPTIONDIALOG USE_TI_UIEMAILDIALOG USE_TI_UIDASHBOARDVIEW USE_TI_UISCROLLVIEW USE_TI_UISCROLLABLEVIEW USE_TI_UITABLEVIEW USE_TI_UILISTVIEW USE_TI_UIANIMATION USE_TI_UIATTRIBUTEDSTRING USE_TI_UIACTIVITYINDICATORSTYLE USE_TI_UITOOLBAR USE_TI_UITABBEDBAR USE_TI_UIAPPLICATIONSHORTCUTS USE_TI_UINAVIGATIONWINDOW USE_TI_UICLIPBOARD USE_TI_UIIPAD USE_TI_UIIPADPOPOVER USE_TI_UIIPADSPLITWINDOW USE_TI_UIIPADSPLITWINDOWBUTTON USE_TI_UIIOS USE_TI_UIIOSADVIEW USE_TI_UIIOSCOVERFLOWVIEW USE_TI_UIIOSTOOLBAR USE_TI_UIIOSTABBEDBAR USE_TI_UIIOSDOCUMENTVIEWER USE_TI_UIIOSNAVIGATIONWINDOW USE_TI_UIIOSSPLITWINDOW USE_TI_UIIOSPREVIEWCONTEXT USE_TI_UIIOSMENUPOPUP USE_TI_UIIOSLIVEPHOTOVIEW USE_TI_UIIOSLIVEPHOTOBADGE USE_TI_UIIOSLIVEPHOTO_BADGE_OPTIONS_OVER_CONTENT USE_TI_UIIOSLIVEPHOTO_BADGE_OPTIONS_LIVE_OFF USE_TI_UIIOSALERTDIALOGSTYLE USE_TI_UIIOSANIMATIONSTYLE USE_TI_UIIOSLISTVIEWCELLSELECTIONSTYLE USE_TI_UIIOSTABLEVIEWCELLSELECTIONSTYLE USE_TI_UIIOSTABLEVIEWSCROLLPOSITION USE_TI_UIIOSLISTVIEWSCROLLPOSITION USE_TI_UIIOSTABLEVIEWSTYLE USE_TI_UIIOSLISTVIEWSTYLE USE_TI_UIIOSPROGRESSBARSTYLE USE_TI_UIIOSROWANIMATIONSTYLE USE_TI_UIIOSSCROLLINDICATORSTYLE USE_TI_UIIOSSTATUSBAR USE_TI_UIIOSSYSTEMBUTTONSTYLE USE_TI_UIIOSSYSTEMBUTTON USE_TI_UIIOSSYSTEMICON USE_TI_UIIOSFEEDBACKGENERATOR USE_TI_UIIOSSTEPPER USE_TI_APPIOS USE_TI_APPIOSSEARCHABLEINDEX USE_TI_APPIOSSEARCHABLEITEM USE_TI_APPIOSSEARCHABLEITEMATTRIBUTESET USE_TI_APPIOSSEARCHQUERY USE_TI_APPIOSUSERACTIVITY USE_TI_APPIOSUSERNOTIFICATIONCENTER USE_TI_UIIOSANIMATOR USE_TI_UIIOSSNAPBEHAVIOR USE_TI_UIIOSPUSHBEHAVIOR USE_TI_UIIOSGRAVITYBEHAVIOR USE_TI_UIIOSANCHORATTACHMENTBEHAVIOR USE_TI_UIIOSVIEWATTACHMENTBEHAVIOR USE_TI_UIIOSCOLLISIONBEHAVIOR USE_TI_UIIOSDYNAMICITEMBEHAVIOR USE_TI_UIIOSTRANSITIONANIMATION USE_TI_UIREFRESHCONTROL USE_TI_UIIOSAPPLICATIONSHORTCUTS USE_TI_UISHORTCUT USE_TI_UISHORTCUTITEM USE_TI_UIIOSBLURVIEW USE_TI_NETWORKREGISTERFORPUSHNOTIFICATIONS USE_TI_SILENTPUSH USE_TI_FETCH USE_TI_MEDIASHOWCAMERA USE_TI_MEDIAHIDECAMERA USE_TI_MEDIAOPENPHOTOGALLERY USE_TI_MEDIATAKEPICTURE USE_TI_MEDIASTARTVIDEOCAPTURE USE_TI_MEDIASTOPVIDEOCAPTURE USE_TI_MEDIASWITCHCAMERA USE_TI_MEDIAREQUESTCAMERAPERMISSIONS USE_TI_MEDIAHASCAMERAPERMISSIONS USE_TI_MEDIAHASPHOTOGALLERYPERMISSIONS USE_TI_MEDIAREQUESTPHOTOGALLERYPERMISSIONS USE_TI_MEDIAOPENMUSICLIBRARY USE_TI_MEDIAHIDEMUSICLIBRARY USE_TI_MEDIAQUERYMUSICLIBRARY USE_TI_MEDIAREQUESTAUDIORECORDERPERMISSIONS USE_TI_MEDIAHASAUDIORECORDERPERMISSIONS USE_TI_MEDIAHASAUDIOPERMISSIONS USE_TI_MEDIAHASMUSICLIBRARYPERMISSIONS USE_TI_MEDIAREQUESTMUSICLIBRARYPERMISSIONS USE_TI_MEDIACANRECORD USE_TI_MEDIAISCAMERASUPPORTED USE_TI_MEDIAISMEDIATYPESUPPORTED USE_TI_MEDIASAVETOPHOTOGALLERY USE_TI_MEDIASTARTVIDEOEDITING USE_TI_MEDIASTOPVIDEOEDITING USE_TI_MEDIAAUDIOPLAYER USE_TI_MEDIAAUDIORECORDER USE_TI_MEDIAMUSICPLAYER USE_TI_MEDIASYSTEMMUSICPLAYER USE_TI_MEDIASYSTEMALERT USE_TI_MEDIAGETSYSTEMMUSICPLAYER USE_TI_MEDIAAPPMUSICPLAYER USE_TI_MEDIAGETAPPMUSICPLAYER USE_TI_MEDIAVIDEOPLAYER USE_TI_MEDIASOUND USE_TI_MEDIACAMERA_AUTHORIZATION_AUTHORIZED USE_TI_MEDIACAMERA_AUTHORIZATION_DENIED USE_TI_MEDIACAMERA_AUTHORIZATION_RESTRICTED USE_TI_MEDIACAMERA_AUTHORIZATION_UNKNOWN USE_TI_MEDIACAMERA_FRONT USE_TI_MEDIACAMERA_REAR USE_TI_MEDIACAMERA_FLASH_OFF USE_TI_MEDIACAMERA_FLASH_AUTO USE_TI_MEDIACAMERA_FLASH_ON USE_TI_MEDIACAMERAFLASHMODE USE_TI_MEDIAAVAILABLECAMERAMEDIATYPES USE_TI_MEDIAAVAILABLEPHOTOMEDIATYPES USE_TI_MEDIAAVAILABLEPHOTOGALLERYMEDIATYPES USE_TI_MEDIAAVAILABLECAMERAS USE_TI_MEDIACAMERAAUTHORIZATION USE_TI_MEDIAVOLUME USE_TI_MEDIAAUDIOPLAYING USE_TI_MEDIACURRENTROUTE USE_TI_MEDIAVIBRATE USE_TI_MEDIABEEP USE_TI_MEDIASTARTMICROPHONEMONITOR USE_TI_MEDIASTOPMICROPHONEMONITOR USE_TI_MEDIAPEAKMICROPHONEPOWER USE_TI_MEDIAGETPEAKMICROPHONEPOWER USE_TI_MEDIAAVERAGEMICROPHONEPOWER USE_TI_MEDIAGETAVERAGEMICROPHONEPOWER USE_TI_UITABLEVIEWSCROLLPOSITION USE_TI_UILISTVIEWSCROLLPOSITION
TI_SYMBOL_MACROS=USE_JSCORE_FRAMEWORK USE_TI_STREAM USE_TI_CODEC USE_TI_UTILS USE_TI_XML USE_TI_ACCELEROMETER USE_TI_API USE_TI_APP USE_TI_APPTRACKUSERINTERACTION USE_TI_CALENDAR USE_TI_CONTACTS USE_TI_DATABASE USE_TI_FILESYSTEM USE_TI_GEOLOCATION USE_TI_GESTURE USE_TI_MEDIA USE_TI_NETWORK USE_TI_NETWORKSOCKET USE_TI_PLATFORM USE_TI_PLATFORMIDENTIFIERFORADVERTISING USE_TI_PLATFORMGETIDENTIFIERFORADVERTISING USE_TI_WATCHSESSION USE_TI_UI USE_TI_UITAB USE_TI_UILABEL USE_TI_UIBUTTON USE_TI_UIPROGRESSBAR USE_TI_UISEARCHBAR USE_TI_UIACTIVITYINDICATOR USE_TI_UIOPTIONBAR USE_TI_UISLIDER USE_TI_UISWITCH USE_TI_UIPICKER USE_TI_UITEXTAREA USE_TI_UITEXTFIELD USE_TI_UIIMAGEVIEW USE_TI_UIMASKEDIMAGE USE_TI_UIWEBVIEW USE_TI_UIWINDOW USE_TI_UIVIEW USE_TI_UIOPTIONDIALOG USE_TI_UIEMAILDIALOG USE_TI_UIDASHBOARDVIEW USE_TI_UISCROLLVIEW USE_TI_UISCROLLABLEVIEW USE_TI_UITABLEVIEW USE_TI_UILISTVIEW USE_TI_UIANIMATION USE_TI_UIATTRIBUTEDSTRING USE_TI_UIACTIVITYINDICATORSTYLE USE_TI_UITOOLBAR USE_TI_UITABBEDBAR USE_TI_UIAPPLICATIONSHORTCUTS USE_TI_UINAVIGATIONWINDOW USE_TI_UICLIPBOARD USE_TI_UIIPAD USE_TI_UIIPADPOPOVER USE_TI_UIIPADSPLITWINDOW USE_TI_UIIPADSPLITWINDOWBUTTON USE_TI_UIIOS USE_TI_UIIOSADVIEW USE_TI_UIIOSCOVERFLOWVIEW USE_TI_UIIOSTOOLBAR USE_TI_UIIOSTABBEDBAR USE_TI_UIIOSDOCUMENTVIEWER USE_TI_UIIOSNAVIGATIONWINDOW USE_TI_UIIOSSPLITWINDOW USE_TI_UIIOSPREVIEWCONTEXT USE_TI_UIIOSMENUPOPUP USE_TI_UIIOSLIVEPHOTOVIEW USE_TI_UIIOSLIVEPHOTOBADGE USE_TI_UIIOSLIVEPHOTO_BADGE_OPTIONS_OVER_CONTENT USE_TI_UIIOSLIVEPHOTO_BADGE_OPTIONS_LIVE_OFF USE_TI_UIIOSALERTDIALOGSTYLE USE_TI_UIIOSANIMATIONSTYLE USE_TI_UIIOSLISTVIEWCELLSELECTIONSTYLE USE_TI_UIIOSTABLEVIEWCELLSELECTIONSTYLE USE_TI_UIIOSTABLEVIEWSCROLLPOSITION USE_TI_UIIOSLISTVIEWSCROLLPOSITION USE_TI_UIIOSTABLEVIEWSTYLE USE_TI_UIIOSLISTVIEWSTYLE USE_TI_UIIOSPROGRESSBARSTYLE USE_TI_UIIOSROWANIMATIONSTYLE USE_TI_UIIOSSCROLLINDICATORSTYLE USE_TI_UIIOSSTATUSBAR USE_TI_UIIOSSYSTEMBUTTONSTYLE USE_TI_UIIOSSYSTEMBUTTON USE_TI_UIIOSSYSTEMICON USE_TI_UIIOSFEEDBACKGENERATOR USE_TI_UIIOSSTEPPER USE_TI_APPIOS USE_TI_APPIOSSEARCHABLEINDEX USE_TI_APPIOSSEARCHABLEITEM USE_TI_APPIOSSEARCHABLEITEMATTRIBUTESET USE_TI_APPIOSSEARCHQUERY USE_TI_APPIOSUSERACTIVITY USE_TI_APPIOSUSERNOTIFICATIONCENTER USE_TI_UIIOSANIMATOR USE_TI_UIIOSSNAPBEHAVIOR USE_TI_UIIOSPUSHBEHAVIOR USE_TI_UIIOSGRAVITYBEHAVIOR USE_TI_UIIOSANCHORATTACHMENTBEHAVIOR USE_TI_UIIOSVIEWATTACHMENTBEHAVIOR USE_TI_UIIOSCOLLISIONBEHAVIOR USE_TI_UIIOSDYNAMICITEMBEHAVIOR USE_TI_UIIOSTRANSITIONANIMATION USE_TI_UIREFRESHCONTROL USE_TI_UIIOSAPPLICATIONSHORTCUTS USE_TI_UISHORTCUT USE_TI_UISHORTCUTITEM USE_TI_UIIOSBLURVIEW USE_TI_NETWORKREGISTERFORPUSHNOTIFICATIONS USE_TI_SILENTPUSH USE_TI_FETCH USE_TI_MEDIASHOWCAMERA USE_TI_MEDIAHIDECAMERA USE_TI_MEDIAOPENPHOTOGALLERY USE_TI_MEDIATAKEPICTURE USE_TI_MEDIASTARTVIDEOCAPTURE USE_TI_MEDIASTOPVIDEOCAPTURE USE_TI_MEDIASWITCHCAMERA USE_TI_MEDIAREQUESTCAMERAPERMISSIONS USE_TI_MEDIAHASCAMERAPERMISSIONS USE_TI_MEDIAHASPHOTOGALLERYPERMISSIONS USE_TI_MEDIAREQUESTPHOTOGALLERYPERMISSIONS USE_TI_MEDIAOPENMUSICLIBRARY USE_TI_MEDIAHIDEMUSICLIBRARY USE_TI_MEDIAQUERYMUSICLIBRARY USE_TI_MEDIAREQUESTAUDIORECORDERPERMISSIONS USE_TI_MEDIAHASAUDIORECORDERPERMISSIONS USE_TI_MEDIAHASAUDIOPERMISSIONS USE_TI_MEDIAHASMUSICLIBRARYPERMISSIONS USE_TI_MEDIAREQUESTMUSICLIBRARYPERMISSIONS USE_TI_MEDIACANRECORD USE_TI_MEDIAISCAMERASUPPORTED USE_TI_MEDIAISMEDIATYPESUPPORTED USE_TI_MEDIASAVETOPHOTOGALLERY USE_TI_MEDIASTARTVIDEOEDITING USE_TI_MEDIASTOPVIDEOEDITING USE_TI_MEDIAAUDIOPLAYER USE_TI_MEDIAAUDIORECORDER USE_TI_MEDIAMUSICPLAYER USE_TI_MEDIASYSTEMMUSICPLAYER USE_TI_MEDIASYSTEMALERT USE_TI_MEDIAGETSYSTEMMUSICPLAYER USE_TI_MEDIAAPPMUSICPLAYER USE_TI_MEDIAGETAPPMUSICPLAYER USE_TI_MEDIAVIDEOPLAYER USE_TI_MEDIASOUND USE_TI_MEDIACAMERA_AUTHORIZATION_AUTHORIZED USE_TI_MEDIACAMERA_AUTHORIZATION_DENIED USE_TI_MEDIACAMERA_AUTHORIZATION_RESTRICTED USE_TI_MEDIACAMERA_AUTHORIZATION_UNKNOWN USE_TI_MEDIACAMERA_FRONT USE_TI_MEDIACAMERA_REAR USE_TI_MEDIACAMERA_FLASH_OFF USE_TI_MEDIACAMERA_FLASH_AUTO USE_TI_MEDIACAMERA_FLASH_ON USE_TI_MEDIACAMERAFLASHMODE USE_TI_MEDIAAVAILABLECAMERAMEDIATYPES USE_TI_MEDIAAVAILABLEPHOTOMEDIATYPES USE_TI_MEDIAAVAILABLEPHOTOGALLERYMEDIATYPES USE_TI_MEDIAAVAILABLECAMERAS USE_TI_MEDIACAMERAAUTHORIZATION USE_TI_MEDIAVOLUME USE_TI_MEDIAAUDIOPLAYING USE_TI_MEDIACURRENTROUTE USE_TI_MEDIAVIBRATE USE_TI_MEDIABEEP USE_TI_MEDIASTARTMICROPHONEMONITOR USE_TI_MEDIASTOPMICROPHONEMONITOR USE_TI_MEDIAPEAKMICROPHONEPOWER USE_TI_MEDIAGETPEAKMICROPHONEPOWER USE_TI_MEDIAAVERAGEMICROPHONEPOWER USE_TI_MEDIAGETAVERAGEMICROPHONEPOWER USE_TI_UITABLEVIEWSCROLLPOSITION USE_TI_UILISTVIEWSCROLLPOSITION USE_TI_FILESYSTEMSPACEAVAILABLE USE_TI_FILESYSTEMCREATEDAT USE_TI_FILESYSTEMMODIFIEDAT USE_TI_PLATFORMUPTIME