{ "id": "163294", "key": "TIMOB-23925", "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": [ { "id": "16980", "description": "New V8", "name": "Release 6.0.0", "archived": false, "released": true, "releaseDate": "2016-11-15" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-10-04T08:32:04.000+0000", "created": "2016-09-19T08:55:51.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [], "versions": [ { "id": "18253", "name": "Release 5.5.0", "archived": false, "released": true, "releaseDate": "2016-09-13" } ], "issuelinks": [ { "id": "52858", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "163586", "key": "TIMOB-23970", "fields": { "summary": "iOS: Add permissions-handling for photo-gallery access", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2018-06-14T21:42:11.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "From SDK 5.5.0.G.A Titanium require some new keys in the Info.plist file https://www.appcelerator.com/blog/2016/09/ga-release-for-titanium-sdk-5-5-0-appcelerator-cli-5-5-0-appcelerator-studio-4-7-1/\r\n\r\n{code}\r\n\r\n \r\n \r\n NSContactsUsageDescription\r\n Can we use to your contacts?\r\n NSCameraUsageDescription\r\n Can we use your camera?\r\n NSCalendarsUsageDescription\r\n Can we use your calendar?\r\n NSPhotoLibraryUsageDescription\r\n Can we save to your library?\r\n NSMicrophoneUsageDescription\r\n Can we use your microphone?\r\n \r\n \r\n\r\n{code}\r\n\r\nThis is the (first) email that i received from iTunes Connect after the upload of an update of my app with *SDK 5.5.0.G.A*.\r\nI haven't included any of the previous keys because the app not use any of that functionality.\r\n\r\n{code}\r\nDear developer,\r\n\r\nWe have discovered one or more issues with your recent delivery for \"App Name\". To process your delivery, the following issues must be corrected:\r\n\r\nThis app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nThis app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nThis app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSAppleMusicUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nOnce these issues have been corrected, you can then redeliver the corrected binary.\r\n\r\nRegards,\r\n\r\nThe App Store team\r\n{code}\r\n\r\nOk , after the first email i have update the Info.plist file adding the *NSPhotoLibraryUsageDescription* and the *NSMicrophoneUsageDescription* keys (i don't use any of this functionality). After the second upload , this is the email (second) that i received from iTunes Connect.\r\n\r\n{code}\r\nDear developer,\r\n\r\nWe have discovered one or more issues with your recent delivery for \"App Name\". To process your delivery, the following issues must be corrected:\r\n\r\nThis app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSAppleMusicUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nOnce these issues have been corrected, you can then redeliver the corrected binary.\r\n\r\nRegards,\r\n\r\nThe App Store team\r\n{code}\r\n\r\nOk , after the second email i have update the Info.plist file adding the *NSAppleMusicUsageDescription* key (i don't use this functionality). After the third upload all is ok.\r\n\r\nSo : \r\n- Some keys seem to be required (NSMicrophoneUsageDescription and NSPhotoLibraryUsageDescription), even if the feature is not used\r\n- Add in the docs (and in the article) this keys *NSAppleMusicUsageDescription*\r\n", "attachment": [], "flagged": false, "summary": "iOS: App rejected because some in the Info.plist aren't specified", "creator": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "subtasks": [], "reporter": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "environment": "Appcelerator Studio, build: 4.3.3.201510212245\r\nXcode 8 , iOS 10\r\nTitanium SDK 5.5.0.GA", "closedSprints": [ { "id": 722, "state": "closed", "name": "2016 Sprint 20 SDK", "startDate": "2016-09-28T16:50:17.299Z", "endDate": "2016-10-12T16:50:00.000Z", "completeDate": "2016-10-10T06:17:01.016Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "396492", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there,\r\n\r\nthe keys {{NSPhotoLibraryUsageDescription}} and {{NSMicrophoneUsageDescription}} are even required when you use any camera- or photo-related API. The {{NSAppleMusicUsageDescription}} can be necessary when using any music-related API's, but also media-related queries. The latter one is also discussed in TIMOB-23923.\r\n\r\nAlthough this does not seem to be a Titanium SDK-issue, I would check your source-code anyway (confidential). If you want that, please let me know.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T11:19:44.000+0000", "updated": "2016-09-19T11:31:39.000+0000" }, { "id": "396496", "author": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "body": "I can confirm that this app dont' use any *camera or photo-related API* / *music-related API's*. In fact from the app settings (Settings / App) there is only the cellular data option.", "updateAuthor": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "created": "2016-09-19T11:38:19.000+0000", "updated": "2016-09-19T11:38:33.000+0000" }, { "id": "396505", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Ok, if that's the case, we may need to adjust out compiler-symbols. We only compile certain *classes* when the namespace is used, e.g. {{USE_TI_MEDIA}} for any {{Ti.Media}} API. But in the case that you have an API on the {{Ti.Media}}, all other methods are generated as well. So I would like to know if we can generate method-based symbols to detect this and only compile certain methods if they are actually used.\r\n\r\nNeed some time to think about that.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T13:45:17.000+0000", "updated": "2016-09-19T13:45:17.000+0000" }, { "id": "396561", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~cbarber] We use [this lines|https://github.com/appcelerator/titanium_mobile/blob/master/iphone/cli/commands/_build.js#L5675] to generate symbols like {{USE_TI_MEDIA}} for all {{Ti.Media}} methods. Could we integrate a \"whitelist\" / regex that also detects the usage of {{Ti.Media.queryMusicLibrary}}, {{Ti.Media.showCamera}} and {{Ti.Media.openPhotoGallery}}? Then we could use precompile-macros for those, e.g. {{USE_TI_MEDIA_QUERYMUSICLIBRARY}} and Apple won't complain in the future.\r\n\r\n*EDIT*: Looks like it already does something in the build-process:\r\n{code}\r\n{ ANALYTICS: 1,\r\n API: 1,\r\n NETWORK: 1,\r\n PLATFORM: 1,\r\n UI: 1,\r\n UISETBACKGROUNDCOLOR: 1,\r\n UITABGROUP: 1,\r\n UIWINDOW: 1,\r\n UITAB: 1,\r\n UILABEL: 1,\r\n MEDIASHOWCAMERA: 1,\r\n MEDIA: 1 }\r\n{code}\r\nSo maybe {{USE_TI_MEDIASHOWCAMERA}} could actually be generated.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T19:30:12.000+0000", "updated": "2016-09-19T19:36:55.000+0000" }, { "id": "396667", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "[~hansknoechel] The build will detect all Titanium calls and defines preprocessor constants for the API and its parent. So {{Ti.Media.showCamera}} will generate {{USE_TI_MEDIASHOWCAMERA}} and {{USE_TI_MEDIA}}. There is no need for a whitelist. iOS simply needs to refer to the more specific {{USE_TI_MEDIASHOWCAMERA}} and {{USE_TI_MEDIAQUERYMUSICLIBRARY}} instead of just {{USE_TI_MEDIA}}. We can use this symbol map to generate missing keys in the {{Info.plist}} or show a warning that they are missing.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-09-20T15:01:27.000+0000", "updated": "2016-09-20T15:01:27.000+0000" }, { "id": "396676", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Gotcha. But since we currently only wrap the whole {{MediaModule}} class with one {{#ifdef USE_TI_MEDIA}}, affected methods like {{-(void)showCamera:(id)args}} would even be generated without using them. So we need to a) wrap all related methods (this is huge) and b) detect used symbols to throw warnings beforehand. But I would neglect b) since we already throw a warning in the methods themselves. \r\n\r\nI have a wip-PR for this, but since it's very easy to break stuff with compiler-macros, it needs some more testing before submitting something. Assigning to fix-version 6.0.0 for now.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-20T15:36:45.000+0000", "updated": "2016-09-20T15:36:45.000+0000" }, { "id": "396679", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "How many related methods are there? Ti.Media isn't that big. There's a boat load of constants, but there aren't that many methods. And maybe we leave the methods there, but {{#ifdef}} the implementation and leave the methods in place, perhaps emit a warning or exception if invoked. We should do this anyways. What happens if you build an app for device that does an {{eval('Ti.Media.showCamera()')}}? There are scenarios where the implementation will not exist, but it the API can still be invoked.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-09-20T15:46:57.000+0000", "updated": "2016-09-20T15:46:57.000+0000" }, { "id": "397155", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Correct. We need the same for all other related API's, e.g. Ti.Calendar, Ti.Contacts and probably Ti.Geolocation. I just read another post about this on Slack (regarding contacts usage). [~cng] Do you want me to work on this?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-24T15:57:16.000+0000", "updated": "2016-09-24T15:57:16.000+0000" }, { "id": "397196", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~hansknoechel] yes please. Thanks!", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-09-26T03:24:01.000+0000", "updated": "2016-09-26T03:24:01.000+0000" }, { "id": "397251", "author": { "name": "dfoxinator", "key": "dfoxinator", "displayName": "David Fox", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I'm having this same issue while trying to build my app.\r\n\r\nJust to confirm though, as a temporary workaround, adding these keys despite not actually using the functionality won't break anything, is that correct?", "updateAuthor": { "name": "dfoxinator", "key": "dfoxinator", "displayName": "David Fox", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-26T16:15:58.000+0000", "updated": "2016-09-26T16:15:58.000+0000" }, { "id": "397309", "author": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "body": "correct ", "updateAuthor": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "created": "2016-09-26T19:58:43.000+0000", "updated": "2016-09-26T19:58:57.000+0000" }, { "id": "397537", "author": { "name": "chrisribe", "key": "chrisribe", "displayName": "christian ribe", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I am having the same issue. The NSAppleMusicUsageDescription requirement surprised the heck out of me...\r\nWhat should we put in the string key ? Since apple refuses empty strings... \"Not used\" ??", "updateAuthor": { "name": "chrisribe", "key": "chrisribe", "displayName": "christian ribe", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-28T17:13:17.000+0000", "updated": "2016-09-28T17:40:53.000+0000" }, { "id": "397545", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Anything that makes sense, e.g. \"Can we access your music library to select music?\". I know it's a pseudo-sentence, but since you don't use the API, it won't be prompted anyway. And as soon as this ticket is resolved, you can remove the key again.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-28T17:44:04.000+0000", "updated": "2016-09-28T17:44:04.000+0000" }, { "id": "397547", "author": { "name": "chrisribe", "key": "chrisribe", "displayName": "christian ribe", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Makes sense thanks Hans.", "updateAuthor": { "name": "chrisribe", "key": "chrisribe", "displayName": "christian ribe", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-28T18:00:35.000+0000", "updated": "2016-09-28T18:00:35.000+0000" }, { "id": "397821", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/8456\r\nPackaged version of this PR: [mobilesdk-6.1.0-osx.zip|https://www.dropbox.com/s/n8czyv57ytxtadq/mobilesdk-6.1.0-osx.zip?dl=1]\r\n\r\n*Some notes*:\r\n* The current status should already resolve all of the above warnings\r\n* -I will check Ti.Contacts and Ti.Calendar next (should not be as critical as Ti.Media, since they don't include that many different API's)-\r\n* This needs to be very very well reviewed before merging. I already did tons of both logical tests, but I may have forgot a method-dependency.\r\n\r\n*EDIT*: I can't see problems with non-used Ti.Calendar / Ti.Contacts issues. If your app was rejected because of {{NSCalendarsUsageDescription}} or {{NSContactsUsageDescription}} and you did *not* use the above API's, please let us know!\r\n\r\n*This part is only relevant for the review of this ticket*:\r\n\r\nHere is how you scan your packaged app:\r\n# Unzip the AppName.ipa file after renaming AppName.ipa to AppName.zip\r\n# Open the AppName.app file and navigate to the AppName file (no suffix, thats a binary)\r\n# Copy the AppName file to the desktop\r\n# Open the terminal and navigate to the desktop\r\n# Use {{nm AppName | grep _EK}} to check for Ti.Calendar API's\r\n# Use {{nm AppName | grep _AV}} to check for Ti.Media API's\r\n# Use {{nm AppName | grep _CN}} to check for Ti.Contacts API's (neglect {{_CNCopy*}} results)\r\n# Use {{nm AppName | grep CLLocation}} to check for Ti.Geolocation API's (should already be wrapped correctly before)\r\n\r\n*Additional review-steps*:\r\n1. Create a new app with the packaged version of this PR\r\n2. Build the app for device \r\n3. Follow the above steps to check the symbols of our new apps which are the base for all other ones\r\n\r\nAlso please test the KitchenSink for possible problems regarding Ti.Media API's. I will try to setup another test-case that includes all major Ti.Media API's (showCamera, saveToGallery, openPhotoGallery, openMusicLibrary, queryMusicLibrary).", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-10-01T10:59:15.000+0000", "updated": "2016-10-01T17:18:16.000+0000" }, { "id": "397822", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~nicolomonili] And I noticed that you used {{Appcelerator Studio 4.3.3.201510212245}} which is very outdated. Please use Studio 4.7.x for iOS 10 compatibility.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-10-01T11:04:19.000+0000", "updated": "2016-10-01T11:04:19.000+0000" }, { "id": "397854", "author": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "body": "@Hans Knoechel ok I'll update! strange that is not detected the new version though ..", "updateAuthor": { "name": "nicolomonili", "key": "nicolomonili", "displayName": "nicolomonili", "active": true, "timeZone": "Europe/Rome" }, "created": "2016-10-02T20:17:07.000+0000", "updated": "2016-10-02T20:17:56.000+0000" }, { "id": "397861", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "See comments on PR for KitchenSink-found issues. Scanning a new project that doesn't include any Media / Contacts related API yields no results, which is correct.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-10-03T06:30:16.000+0000", "updated": "2016-10-03T06:30:16.000+0000" }, { "id": "398033", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PR approved. Let's do a backport for 6_0_X please. [~hansknoechel]", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-10-04T03:45:32.000+0000", "updated": "2016-10-04T03:45:44.000+0000" }, { "id": "398038", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (6_0_X): https://github.com/appcelerator/titanium_mobile/pull/8469", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-10-04T07:36:05.000+0000", "updated": "2016-10-04T07:36:05.000+0000" }, { "id": "398040", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PR merged.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-10-04T08:31:53.000+0000", "updated": "2016-10-04T08:31:53.000+0000" }, { "id": "400834", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Verified fixed, using:\r\nMacOS 10.12 (16A323)\r\nStudio 4.8.0.201611020954\r\nTi SDK 6.0.0.v20161111062138\r\nAppc NPM 4.2.8-9\r\nAppc CLI 6.0.0-69\r\nAlloy 1.9.4\r\nXcode 8.1 (8B62)\r\n\r\nScanned and submitted apps with different combinations of permissions or no permissions at all. All were accepted and only showed usage of permissions that were actually used. ", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-11-11T23:08:37.000+0000", "updated": "2016-11-11T23:08:37.000+0000" }, { "id": "405153", "author": { "name": "jyounus", "key": "jyounus", "displayName": "Junaid Younus", "active": true, "timeZone": "Europe/London" }, "body": "We were able to reproduce this issue with the 6.0.1 release of the SDK.\r\n\r\nHere's the email:\r\n\r\n{code}\r\nMissing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nMissing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.\r\n{code}\r\n\r\n\r\nWe don't use any Calendar or Photo functionality in our app, I did a project-wide search for Ti.Calendar and Ti.Media and there's nothing in our code, only in some auto generated build files. We bypassed the issue by adding the appropriate keys to the tiapp.xml files.", "updateAuthor": { "name": "jyounus", "key": "jyounus", "displayName": "Junaid Younus", "active": true, "timeZone": "Europe/London" }, "created": "2017-01-24T10:08:20.000+0000", "updated": "2017-01-24T10:08:20.000+0000" }, { "id": "405156", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~jyounus] Can you post the contents of the {{build/iphone/Classes/defines.h}} file here? We are currently working on a 6.0.2 version, thx!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-24T10:12:42.000+0000", "updated": "2017-01-24T10:12:42.000+0000" }, { "id": "405158", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "And are you using an Admob module? It's a known issue on their side that they fixed recently. Update the module version in that case.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-24T10:22:53.000+0000", "updated": "2017-01-24T10:22:53.000+0000" }, { "id": "413466", "author": { "name": "crossbits", "key": "crossbits", "displayName": "Danny Pham", "active": true, "timeZone": "Europe/Berlin" }, "body": "I have received the same rejection message with missing NSCalendarsUsageDescription key using latest Titanium SDK 6.0.2 and latest Admob version 2.1.0", "updateAuthor": { "name": "crossbits", "key": "crossbits", "displayName": "Danny Pham", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-17T03:27:00.000+0000", "updated": "2017-03-17T03:27:00.000+0000" }, { "id": "413467", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hello [~crossbits] \r\nDid you add the NSCalendarsUsageDescription key and value to the tiapp.xml plist section?", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-03-17T03:33:57.000+0000", "updated": "2017-03-17T03:33:57.000+0000" }, { "id": "413468", "author": { "name": "crossbits", "key": "crossbits", "displayName": "Danny Pham", "active": true, "timeZone": "Europe/Berlin" }, "body": "After the rejection, yes. Now the upload seems fine. But I don't use any calender functions.", "updateAuthor": { "name": "crossbits", "key": "crossbits", "displayName": "Danny Pham", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-17T03:35:39.000+0000", "updated": "2017-03-17T03:35:39.000+0000" }, { "id": "413469", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hmmm... If you look in the folder: /build/ios and find the Xcode project, and launch it in Xcode, does a search of your code for NSCalendar object give us any clue about where the source of the rejection would've come from?", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-03-17T03:43:23.000+0000", "updated": "2017-03-17T03:43:23.000+0000" }, { "id": "413480", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~crossbits] Let's work on that then! Can you reach out to me on Ti-Slack and send me the generated defines.m from {{build/iphone/Classes/}}? Thx!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-17T11:17:22.000+0000", "updated": "2017-03-17T11:17:22.000+0000" }, { "id": "413661", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "The issue was inside the Admob library. Should be fixed after [this update|https://github.com/appcelerator-modules/ti.admob/pull/67].", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-20T13:05:49.000+0000", "updated": "2017-03-20T13:05:49.000+0000" }, { "id": "415828", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "The new Ti.Admob version 2.1.1 is released and includes the above fixes as well.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-25T10:51:24.000+0000", "updated": "2017-03-25T10:51:24.000+0000" }, { "id": "429278", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "My TestFlight app with 6.3.0.RC got rejected because it didn't include *NSAppleMusicUsageDescription* again. I'm only using Camera, PhotoGallery and these Modules:\r\n{code}\r\ndk.napp.slidemenu\r\nreste\r\nnl.fokkezb.html2as\r\nav.imageview\r\n{code}\r\nI'll add it again but I have 4 versions online already (6.2.0.GA) which didn't need the key in tiapp.xml", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-10-19T06:45:34.000+0000", "updated": "2017-10-19T06:45:34.000+0000" }, { "id": "429840", "author": { "name": "jkneen", "key": "jkneen", "displayName": "Jason Kneen", "active": false, "timeZone": "Africa/Ceuta" }, "body": "Seeing the music and photo error from Apple when the app we're building doesn't access camera or photos and doesn't access music.\r\n\r\nIt does play / stream remote videos.", "updateAuthor": { "name": "jkneen", "key": "jkneen", "displayName": "Jason Kneen", "active": false, "timeZone": "Africa/Ceuta" }, "created": "2017-10-30T16:11:16.000+0000", "updated": "2017-10-30T16:11:16.000+0000" }, { "id": "429841", "author": { "name": "jkneen", "key": "jkneen", "displayName": "Jason Kneen", "active": false, "timeZone": "Africa/Ceuta" }, "body": "That's on 6.2.2.GA btw", "updateAuthor": { "name": "jkneen", "key": "jkneen", "displayName": "Jason Kneen", "active": false, "timeZone": "Africa/Ceuta" }, "created": "2017-10-30T16:12:20.000+0000", "updated": "2017-10-30T16:12:20.000+0000" }, { "id": "432889", "author": { "name": "mitulbhalia", "key": "mitulbhalia", "displayName": "Mitul Bhalia", "active": true, "timeZone": "Asia/Kolkata" }, "body": "One of my app is rejected yesterday with ti sdk 6.3.1 saying NSBluetoothPeripheralUsageDesc key is missing.\r\n\r\n@Jason Kneen \r\n", "updateAuthor": { "name": "mitulbhalia", "key": "mitulbhalia", "displayName": "Mitul Bhalia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2018-01-09T05:22:52.000+0000", "updated": "2018-01-09T05:22:52.000+0000" }, { "id": "438430", "author": { "name": "cornflakesuperstar", "key": "cornflakesuperstar", "displayName": "Jason Kotchoff", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Apple rejected our app today which was built with Ti 7.1.1 stating:\r\n\r\nbq. We identified one or more issues with a recent delivery for your app, \"xxx\". Please correct the following issues, then upload again.\r\nbq. Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.\r\nbq. Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSBluetoothPeripheralUsageDescription key with a string value explaining to the user how the app uses this data.\r\nbq. Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.\r\n\r\nOur app doesn't use the photo library, bluetooth or the microphone however I managed to get a build accepted by apple by adding the following to the tiapp.xml:\r\n\r\n{code:java}\r\n\r\n NSPhotoLibraryUsageDescription\r\n Can we save to your photo library?\r\n NSBluetoothPeripheralUsageDescription\r\n Can we use your bluetooth?\r\n NSMicrophoneUsageDescription\r\n Can we use your microphone?\r\n\r\n{code}\r\n\r\nThe app doesn't use admob so this must be related to the core Titanium SDK.", "updateAuthor": { "name": "cornflakesuperstar", "key": "cornflakesuperstar", "displayName": "Jason Kotchoff", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-06-14T21:09:51.000+0000", "updated": "2018-06-14T21:09:51.000+0000" }, { "id": "438431", "author": { "name": "cornflakesuperstar", "key": "cornflakesuperstar", "displayName": "Jason Kotchoff", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Actually, a friend told me his app was rejected for containing vague descriptions like this so I'll change this to:\r\n\r\n{code:java}\r\n\r\n NSPhotoLibraryUsageDescription\r\n APP_NAME does not use your photo library\r\n NSBluetoothPeripheralUsageDescription\r\n APP_NAME does not use your bluetooth\r\n NSMicrophoneUsageDescription\r\n APP_NAME does not use your microphone\r\n\r\n{code}\r\n\r\nbased on:\r\n[https://stackoverflow.com/questions/39519773/nsphotolibraryusagedescription-key-must-be-present-in-info-plist-to-use-camera-r/39519960#39519960|http://example.com]", "updateAuthor": { "name": "cornflakesuperstar", "key": "cornflakesuperstar", "displayName": "Jason Kotchoff", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-06-14T21:42:11.000+0000", "updated": "2018-06-14T21:42:11.000+0000" } ], "maxResults": 38, "total": 38, "startAt": 0 } } }