{ "id": "171975", "key": "TIMOB-26243", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2018-07-27T10:11:36.000+0000", "priority": null, "labels": [ "engSchedule", "ios" ], "versions": [ { "id": "19882", "name": "Release 8.0.0", "archived": false, "released": true, "releaseDate": "2019-03-14" } ], "issuelinks": [], "assignee": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2019-04-16T15:35:48.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "13715", "name": "Hyperloop", "description": "Hyperloop project" } ], "description": "I want to access the photos saved on the device in titanium. If I create a new project and add {code}var photos = require('PhotoKit/PHPhotoLibrary');{code} I get the following build log.\r\n\r\n{code} \r\n[INFO] : Alloy compiled in 0.46666s\r\n[INFO] : Alloy compiler completed successfully\r\n[INFO] : JavaScript files need to be encrypted\r\n[INFO] : Creating Xcode project\r\n[INFO] : Creating Entitlements.plist\r\n[INFO] : Creating Info.plist\r\n[INFO] : Disabling ATS\r\n[INFO] : Creating main.m\r\n[INFO] : Creating Xcode config files\r\n[INFO] : Copying Titanium libraries\r\n[INFO] : Copying Titanium iOS files\r\n[INFO] : Installing default LaunchScreen.storyboard\r\n[INFO] : Creating debugger and profiler plists\r\n[INFO] : Analyzing Resources directory\r\n[INFO] : Analyzing platform files\r\n[INFO] : Analyzing module files\r\n[INFO] : Analyzing localized launch images\r\n[INFO] : Analyzing CommonJS modules\r\n[INFO] : Creating asset catalog\r\n[INFO] : Creating app icon set\r\n[INFO] : Creating launch logo image set\r\n[INFO] : Creating launch image set\r\n[INFO] : Creating assets image set\r\n[INFO] : Processing JavaScript files\r\n[INFO] : Writing app properties\r\n[INFO] : Encrypting JavaScript files\r\n[INFO] : Writing i18n files\r\n[INFO] : Processing Titanium symbols\r\n[INFO] : Removing files\r\n[INFO] : Optimizing .plist and .png files\r\n[INFO] : Starting Hyperloop assembly\r\n[INFO] : Skipping Hyperloop compile, no usage found ...\r\n[INFO] : Finished Hyperloop assembly in 0 seconds\r\n[INFO] : Invoking xcodebuild\r\n[INFO] : Finished building the application in 13s 265ms\r\n[INFO] : Installing app on device: Ideagen PLC iPad\r\n[INFO] : App successfully installed on device: Ideagen PLC iPad\r\nPlease manually launch the application\r\n[INFO] : hyperloop-photo-album/1.0 (7.2.0.ecae6740fe)\r\n[ERROR] : Script Error Couldn't find module: PhotoKit/PHPhotoLibrary for architecture: armv7\r\n{code}\r\n\r\nIt appears to skip hyperloop assembly. If I build the app again after adding {code}var view = require('UIKit/UIView');{code} I get the following log.\r\n\r\n{code:java}\r\n[INFO] : Alloy compiled in 0.47754s\r\n[INFO] : Alloy compiler completed successfully\r\n[INFO] : JavaScript files need to be encrypted\r\n[INFO] : Creating Xcode project\r\n[INFO] : Creating Entitlements.plist\r\n[INFO] : Creating Info.plist\r\n[INFO] : Disabling ATS\r\n[INFO] : Creating main.m\r\n[INFO] : Creating Xcode config files\r\n[INFO] : Copying Titanium libraries\r\n[INFO] : Copying Titanium iOS files\r\n[INFO] : Installing default LaunchScreen.storyboard\r\n[INFO] : Creating debugger and profiler plists\r\n[INFO] : Analyzing Resources directory\r\n[INFO] : Analyzing platform files\r\n[INFO] : Analyzing module files\r\n[INFO] : Analyzing localized launch images\r\n[INFO] : Analyzing CommonJS modules\r\n[INFO] : Creating asset catalog\r\n[INFO] : Creating app icon set\r\n[INFO] : Creating launch logo image set\r\n[INFO] : Creating launch image set\r\n[INFO] : Creating assets image set\r\n[INFO] : Processing JavaScript files\r\n[INFO] : Writing app properties\r\n[INFO] : Encrypting JavaScript files\r\n[INFO] : Writing i18n files\r\n[INFO] : Processing Titanium symbols\r\n[INFO] : Removing files\r\n[INFO] : Optimizing .plist and .png files\r\n[INFO] : Starting Hyperloop assembly\r\n[WARN] : [Hyperloop] couldn't find class Protocol * {\"name\":\"protocol\",\"optional\":false,\"type\":{\"type\":\"objc_pointer\",\"value\":\"Protocol *\"}}\r\n[WARN] : [Hyperloop] Not sure how to handle: name= nodeInteraction type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= eventValues type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= options type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= uc_stack type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= name type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= dylib type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= name type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= fl type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= timeout type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= name type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= name type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= fvmlib type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= gr_group type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= gsr_group type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= gsr_source type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= __u6_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ipi6_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ipi_spec_dst type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ipi_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ip6m_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_multiaddr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_interface type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_multiaddr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_sourceaddr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_interface type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_multiaddr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= imr_address type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ip_dst type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ipv6mr_multiaddr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= it_interval type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= it_value type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= fsec_acl type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= msfr_group type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= name type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= linked_modules type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= path type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ru_utime type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= ru_stime type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= _bf type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= _ub type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= _lb type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= __sigaction_u type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= sigev_value type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= si_value type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= sin_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= sin6_addr type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= __darwin_rune_t type= function_proto value= function_proto\r\n[WARN] : [Hyperloop] Not sure how to handle: name= client type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= umbrella type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= sub_library type= unknown type: 119 value= unknown type: 119\r\n[WARN] : [Hyperloop] Not sure how to handle: name= sub_umbrella type= unknown type: 119 value= unknown type: 119\r\n[INFO] : [Hyperloop] Generating class iAd/ADBannerView\r\n...\r\n[INFO] : [Hyperloop] Generating class PDFKit/PDFView\r\n[INFO] : [Hyperloop] Generating class Photos/PHAdjustmentData\r\n[INFO] : [Hyperloop] Generating class Photos/PHAsset\r\n[INFO] : [Hyperloop] Generating class Photos/PHAssetChangeRequest\r\n[INFO] : [Hyperloop] Generating class Photos/PHAssetCollectionChangeRequest\r\n[INFO] : [Hyperloop] Generating class Photos/PHAssetResource\r\n[INFO] : [Hyperloop] Generating class Photos/PHCollection\r\n[INFO] : [Hyperloop] Generating class Photos/PHCollectionListChangeRequest\r\n[INFO] : [Hyperloop] Generating class Photos/PHContentEditingInput\r\n[INFO] : [Hyperloop] Generating class Photos/PHImageManager\r\n[INFO] : [Hyperloop] Generating class Photos/PHImageRequestOptions\r\n[INFO] : [Hyperloop] Generating class Photos/PHLivePhoto\r\n[INFO] : [Hyperloop] Generating class Photos/PHLivePhotoRequestOptions\r\n[INFO] : [Hyperloop] Generating class PhotosUI/PHLivePhotoView\r\n[INFO] : [Hyperloop] Generating class Photos/PHObject\r\n[INFO] : [Hyperloop] Generating class Photos/PHVideoRequestOptions\r\n[INFO] : [Hyperloop] Generating class PassKit/PKAddPassesViewController\r\n...\r\n[INFO] : [Hyperloop] Generating custom Hyperloop/Custom\r\n[INFO] : Generation took 3791 ms\r\n[INFO] : Forcing rebuild: Xcode project has changed since last build\r\n[INFO] : Finished Hyperloop assembly in 20.83 seconds\r\n[INFO] : Invoking xcodebuild\r\n[INFO] : Finished building the application in 37s 603ms\r\n[INFO] : Installing app on device: Ideagen PLC iPad\r\n[INFO] : App successfully installed on device: Ideagen PLC iPad\r\nPlease manually launch the application\r\n[INFO] : hyperloop-photo-album/1.0 (7.2.0.ecae6740fe)\r\n[ERROR] : Script Error Couldn't find module: PhotoKit/PHPhotoLibrary for architecture: armv7\r\n{code}\r\n\r\nThis time it has compiled hyperloop but in the list of generated hyperloop classes logged PhotoKit/PHPhotoLibrary doesn't appear, but Photos/PHPhotoLibrary does so if I try again with {code}var photos = require('PhotoKit/PHPhotoLibrary');{code} I get the following build log.\r\n\r\n{code}\r\n[INFO] : Alloy compiled in 0.40499s\r\n[INFO] : Alloy compiler completed successfully\r\n[INFO] : JavaScript files need to be encrypted\r\n[INFO] : Creating Xcode project\r\n[INFO] : Creating Entitlements.plist\r\n[INFO] : Creating Info.plist\r\n[INFO] : Disabling ATS\r\n[INFO] : Creating main.m\r\n[INFO] : Creating Xcode config files\r\n[INFO] : Copying Titanium libraries\r\n[INFO] : Copying Titanium iOS files\r\n[INFO] : Installing default LaunchScreen.storyboard\r\n[INFO] : Creating debugger and profiler plists\r\n[INFO] : Analyzing Resources directory\r\n[INFO] : Analyzing platform files\r\n[INFO] : Analyzing module files\r\n[INFO] : Analyzing localized launch images\r\n[INFO] : Analyzing CommonJS modules\r\n[INFO] : Creating asset catalog\r\n[INFO] : Creating app icon set\r\n[INFO] : Creating launch logo image set\r\n[INFO] : Creating launch image set\r\n[INFO] : Creating assets image set\r\n[INFO] : Processing JavaScript files\r\n[INFO] : Writing app properties\r\n[INFO] : Encrypting JavaScript files\r\n[INFO] : Writing i18n files\r\n[INFO] : Processing Titanium symbols\r\n[INFO] : Removing files\r\n[INFO] : Optimizing .plist and .png files\r\n[INFO] : Starting Hyperloop assembly\r\n[INFO] : Forcing rebuild: Xcode project has changed since last build\r\n[INFO] : Finished Hyperloop assembly in 12.12 seconds\r\n[INFO] : Invoking xcodebuild\r\n[ERROR] : ** BUILD FAILED **\r\n[ERROR] : The following build commands failed:\r\n[ERROR] : \tCompileC build/Intermediates/hyperloop-photo-album.build/Debug-iphoneos/hyperloop-photo-album.build/Objects-normal/armv7/photos.o /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler\r\n[ERROR] : (1 failure)\r\n{code}\r\n\r\nThis time I get the compile error I described in AC-5813. The issue was closed as invalid with the advice to use PhotoKit/PHPhotoLibrary instead of Photos/PHPhotoLibrary. Neither seem to work for me and I'm not sure if it's a bug or if I'm doing something wrong. I haven't posted full logs as this description seems to have a 32,767 character limit.", "attachment": [ { "id": "65393", "filename": "Log 1 PhotoKit.PHPhotoLibrary", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T11:08:43.000+0000", "size": 9535, "mimeType": "application/octet-stream" }, { "id": "65392", "filename": "Log 2 Added UIKit.UIView", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T11:08:43.000+0000", "size": 129376, "mimeType": "application/octet-stream" }, { "id": "65396", "filename": "trace level log.txt", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T14:37:14.000+0000", "size": 3517485, "mimeType": "text/plain" } ], "flagged": false, "summary": "Hyperloop: iOS - Cannot use PHPhotoLibrary API due to cast errors", "creator": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "439532", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there! Although duplicate tickets are not advised, it's fine for this one. If {{Photos/PHPhotoLibrary}} throws a build error, you need to attach the full log as an attachment (not inside the description field).\r\n\r\n*EDIT*: Please add the trace logs instead of the info logs, as they contain more information. Also, please remve sensitive data if any.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-27T10:52:10.000+0000", "updated": "2018-07-27T11:10:30.000+0000" }, { "id": "439533", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Sorry about the duplicate. I wasn't sure if a ticket marked as closed would be monitored. I've attached the complete build logs from the description.", "updateAuthor": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T11:12:34.000+0000", "updated": "2018-07-27T11:12:34.000+0000" }, { "id": "439539", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "I am sorry suggesting \"PhotoKit\", it seems like Apple lacks some clear documentation on the actual import there. So \"Photos/PHPhotoLibrary\" should definitely work. If it doesn't, it's either a bug or you are building for a target version that is lower than a property/method that is used by the API. Please add the full trace log of using the following require:\r\n{code:js}\r\nvar PHPhotoLibrary = require('Photos/PHPhotoLibrary');\r\n{code}\r\nNote: You can do that in the Terminal by running {{appc run -p ios -l trace}} or select \"Trace\" for the log-level in Studio (above the console).", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-27T14:19:12.000+0000", "updated": "2018-07-27T14:19:12.000+0000" }, { "id": "439541", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "body": "No need to apologise. I've been finding apple's documentation unclear too. I have attached a trace level log. Thank you for helping with this.", "updateAuthor": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T14:37:15.000+0000", "updated": "2018-07-27T14:37:15.000+0000" }, { "id": "439542", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Valid bug! Here is the root cause from the trace:\r\n{code}\r\n[TRACE] : /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m:56:16: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]\r\n[TRACE] : id _arg1 = (arg1 == nil || [(id)arg1 isEqual:[NSNull null]]) ? (id)[NSNull null] : (id)[HyperloopPointer pointer:(__bridge void *)arg1 encoding:@encode(id)];\r\n[TRACE] : ^\r\n[TRACE] : /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m:52:50: note: declare the parameter __autoreleasing explicitly to suppress this warning\r\n[TRACE] : return [^(id arg0, NSError ** arg1) {\r\n[TRACE] : ^\r\n[TRACE] : __autoreleasing \r\n[TRACE] : /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m:52:50: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools\r\n[TRACE] : /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m:56:32: error: cast of an indirect pointer to an Objective-C pointer to 'id' is disallowed with ARC\r\n[TRACE] : id _arg1 = (arg1 == nil || [(id)arg1 isEqual:[NSNull null]]) ? (id)[NSNull null] : (id)[HyperloopPointer pointer:(__bridge void *)arg1 encoding:@encode(id)];\r\n[TRACE] : ^~~~~~~~\r\n[TRACE] : /Users/donaldanderson/Documents/Appcelerator_Studio_Workspace/hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m:56:117: error: incompatible types casting 'NSError *__autoreleasing *' to 'void *' with a __bridge cast\r\n[TRACE] : id _arg1 = (arg1 == nil || [(id)arg1 isEqual:[NSNull null]]) ? (id)[NSNull null] : (id)[HyperloopPointer pointer:(__bridge void *)arg1 encoding:@encode(id)];\r\n[TRACE] : ^ ~~~~~~ ~~~~\r\n[TRACE] : 1 warning and 2 errors generated.\r\n[TRACE] : \r\n{code}\r\n\r\nI cannot commit to a timeframe this can be fixed, we will give it a shot next sprint.\r\n\r\n[~donald.anderson] Can you also attach the generated \"photos.m\" from {{hyperloop-photo-album/build/hyperloop/ios/js/photos/photos.m}}?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-27T14:44:19.000+0000", "updated": "2018-07-27T14:48:07.000+0000" }, { "id": "439543", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Thanks. Do you happen to know of any way to get all the photos save on a device in titanium for iOS and Android? All I can find in the documentation is Ti.Media.openPhotoGallery.", "updateAuthor": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T14:56:29.000+0000", "updated": "2018-07-27T14:56:29.000+0000" }, { "id": "439544", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Fetch via API or select from the UI?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-27T14:57:46.000+0000", "updated": "2018-07-27T14:57:46.000+0000" }, { "id": "439545", "author": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Fetch via API. We need to go through all photos taken to look for certain images that our app failed to upload. We should be able to identify which images are the missing ones by examining the metadata. I have the photos.m file you requested but I seem to have lost the option to add attachments after this ticket was converted to a TIMOB issue.", "updateAuthor": { "name": "donald.anderson", "key": "donald.anderson", "displayName": "Donald Anderson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-27T15:20:28.000+0000", "updated": "2018-07-27T15:20:28.000+0000" }, { "id": "439546", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Maybe with this one?\r\n{code:js}\r\nvar PHAsset = require('Photos/PHAsset');\r\nvar PHFetchOptions = require('Photos/PHFetchOptions');\r\n\r\nvar options = new PHFetchOptions();\r\nvar assets = PHAsset.fetchAssetsWithMediaTypeOptions(PHAssetMediaTypeImage, options);\r\n{code}\r\nRead more [here|https://developer.apple.com/documentation/photokit/phasset/1624725-fetchassetswithmediatype]. Otherwise, you could use a native module as a workaround.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-27T15:24:30.000+0000", "updated": "2018-07-27T15:24:30.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }