{ "id": "163314", "key": "TIMOB-23929", "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" }, { "id": "17608", "name": "Release 6.1.0", "archived": false, "released": true, "releaseDate": "2017-05-26" }, { "id": "18322", "name": "Release 5.5.1", "archived": false, "released": true, "releaseDate": "2016-09-28" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-09-27T12:25:53.000+0000", "created": "2016-09-19T20:10:00.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": "52754", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "163302", "key": "TIMOB-23924", "fields": { "summary": "iOS: Random app-rejection due to usage of non-public API", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "updated": "2016-11-17T18:52:44.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": "Evidently, several people have received the following rejection letter from Apple:\r\n\r\nThe message from Apple was as follows:\r\n\r\n_Performance - 2.5.1_\r\n\r\n_Your app uses or references the following non-public APIs:_\r\n\r\n_contextId_\r\n\r\n_The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change._\r\n\r\n_Next Steps_\r\n\r\n_Please revise your app to remove any non-public APIs. If you have defined methods in your source code with the same names as the above-mentioned APIs, we suggest altering your method names so that they no longer collide with Apple's private APIs to avoid your application being flagged in future submissions._\r\n\r\n_Additionally, if you are using third party libraries, please update to the most recent version of those libraries. If you do not have access to the libraries' source, you may be able to search the compiled binary using the \"strings\" or \"otool\" command line tools. The \"strings\" tool can output a list of the methods that the library calls and \"otool -ov\" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the \"nm\" tool to verify if any third-party libraries are calling these APIs._\r\n\r\nhttp://stackoverflow.com/questions/39573151/app-rejection-issue-2-5-1-apps-that-use-non-public-apis-will-be-rejected-since/39576096#39576096\r\n\r\nI believe the required changes are minimal:\r\n\r\nhttps://github.com/search?utf8=%E2%9C%93&q=ContextId+repo%3Aappcelerator%2Ftitanium_mobile&type=Code&ref=searchresults", "attachment": [], "flagged": false, "summary": "Rename contextId to stop confusing Apple's private API scan", "creator": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "396565", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "It is not clear why run-on-main-thread would matter. Perhaps a different branch of code is executing?", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-19T20:12:06.000+0000", "updated": "2016-09-19T20:12:06.000+0000" }, { "id": "396569", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "5_5_X: https://github.com/appcelerator/titanium_mobile/pull/8402\r\n6_0_X: https://github.com/appcelerator/titanium_mobile/pull/8400\r\nmaster: https://github.com/appcelerator/titanium_mobile/pull/8401", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2016-09-19T20:30:31.000+0000", "updated": "2016-09-19T20:30:31.000+0000" }, { "id": "396570", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "The code that referenced the {{contextId}} field was all guarded by {{#ifdef}}'s that would only be true if run-on-main-thread was false. So that flag would directly impact this bug if the field's name is indeed the source of the issue.", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2016-09-19T20:31:25.000+0000", "updated": "2016-09-19T20:31:52.000+0000" }, { "id": "396580", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "The PR is correct. Although I feel that TIMOB-23924 might not be the only other API that causes problems - referring to the Flowdock discussion.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T21:10:06.000+0000", "updated": "2016-09-19T21:10:06.000+0000" }, { "id": "396581", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "We should/could merge it, have an affected person resubmit, and see if it goes away.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-19T21:13:25.000+0000", "updated": "2016-09-19T21:13:25.000+0000" }, { "id": "397223", "author": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "body": "My app was rejected because of this.\r\n\r\nI rebuilt it with the nightly 5.5.1.v20160923122321 and resubmitted.\r\n\r\nIt was rejected again, for the same use (contextId), so I don't think this is fixed.", "updateAuthor": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "created": "2016-09-26T09:44:57.000+0000", "updated": "2016-09-26T09:44:57.000+0000" }, { "id": "397239", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~cdr] Two notes:\r\n\r\n# We had an affected person complain to Apple and they reversed their rejection based on the faulty scan. You might try that.\r\n# What is the text of the rejection letter you got?", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-09-26T14:31:12.000+0000", "updated": "2016-09-26T14:31:12.000+0000" }, { "id": "397240", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "It looks like the build you submitted has not been built with the mentioned 5.5.1 build (verify with your tiapp.xml), because the property is called {{krollContextId}} now, not {{contextId}} any more.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-26T14:33:54.000+0000", "updated": "2016-09-26T14:33:54.000+0000" }, { "id": "397241", "author": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "body": "The rejection text is:\r\n\r\n\r\nbq. Performance - 2.5.1\r\nbq. Your app uses or references the following non-public APIs:\r\nbq. contextId\r\nbq. The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.\r\n\r\n\r\nI complained to Apple initially, but they said that I would need to rebuild the app without this variable in it. \r\n\r\nHans, is it possible to get the SDK version used to build an app from the ipa or xcarchive? Im 95% certain it was built with v20160923122321 as that is what I had in the tiapp.xml at the time\r\n\r\nI've resubmitted the app with run-on-main-thread set to false, waiting to see if that is accepted. ", "updateAuthor": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "created": "2016-09-26T14:40:55.000+0000", "updated": "2016-09-26T14:41:37.000+0000" }, { "id": "397245", "author": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "body": "To be sure, I've just rebuilt the app again with the SDK nightly, but the string persists:\r\n\r\n{code}\r\n$ cat tiapp.xml | grep sdk-version\r\n 5.5.1.v20160923122321\r\n\r\n$ appc ti build -p ios -T dist-appstore\r\nAppcelerator Command-Line Interface, version 5.5.0\r\nCopyright (c) 2014-2016, Appcelerator, Inc. All Rights Reserved.\r\n\r\n[INFO] tiapp.xml set to 5.5.1.v20160923122321, but current Titanium SDK set to 5.5.0.GA\r\n[INFO] Forking correct SDK command: \"/usr/local/bin/node\" \"/Users/cdr/cdr/.appcelerator/install/5.5.0/package/node_modules/titanium/lib/titanium.js\" \"build\" \"--sdk\" \"5.5.1.v20160923122321\" \"--no-banner\" \"--config-file\" \"/var/folders/6k/l6tk275j1dq_hbc26d_8n6440000gn/T/build-1474904184693.json\" \"--platform\" \"iphone\" \"--project-dir\" \"/Users/cdr/cdr/Projects/app\" \"--log-level\" \"info\" \"--ft-port\" \"4157\" \"--developer-name\" \"xxx\" \"--distribution-name\" \"xxx\" \"--target\" \"dist-appstore\"\r\n\r\n9/26/2016, 4:37:07 PM\r\n\r\nOperating System\r\n Name = Mac OS X\r\n Version = 10.12\r\n Architecture = 64bit\r\n # CPUs = 16\r\n Memory = 34359738368\r\n\r\nNode.js\r\n Node.js Version = 4.2.3\r\n npm Version = 3.5.2\r\n\r\nTitanium CLI\r\n CLI Version = 5.0.9\r\n\r\nTitanium SDK\r\n SDK Version = 5.5.1.v20160923122321\r\n SDK Path = /Users/cdr/cdr/Library/Application Support/Titanium/mobilesdk/osx/5.5.1.v20160923122321\r\n Target Platform = iphone\r\n\r\n\r\n* snip *\r\n\r\n[INFO] Archiving debug symbols: /Users/cdr/cdr/Library/Developer/Xcode/Archives/2016-09-26/Device Verification_16-39-07.xcarchive/dSYMs/Device Verification.app.dSYM\r\n[INFO] Launching Xcode: /Applications/Xcode.app\r\n[INFO] Packaging complete\r\n\r\n$ strings ~/Library/Developer/Xcode/Archives/2016-09-26/Device Verification_16-39-07.xcarchive/Products/Applications/Device\\ Verification.app/Device\\ Verification | grep contextId\r\ncontextId\r\ncontextId\r\n{code}\r\n", "updateAuthor": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "created": "2016-09-26T15:47:26.000+0000", "updated": "2016-09-26T15:48:30.000+0000" }, { "id": "397354", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (titanium_debugger/master): https://github.com/appcelerator/titanium_debugger/pull/51", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-27T08:42:35.000+0000", "updated": "2016-09-27T08:42:35.000+0000" }, { "id": "397359", "author": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "body": "Can I access that fix somehow?", "updateAuthor": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "created": "2016-09-27T09:57:31.000+0000", "updated": "2016-09-27T09:57:31.000+0000" }, { "id": "397361", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "timob PRs:\r\n5_5_X:https://github.com/appcelerator/titanium_mobile/pull/8434\r\n6_0_X:https://github.com/appcelerator/titanium_mobile/pull/8435\r\nmaster:https://github.com/appcelerator/titanium_mobile/pull/8436", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-09-27T10:43:23.000+0000", "updated": "2016-09-27T10:43:23.000+0000" }, { "id": "397369", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~emerriman] All PR's merged. The functional test includes testing the kroll-based debugger (run-on-main-thread disabled) by any debugging-operation, e.g. simple app-breakpoint.\r\n\r\n[~cdr] Grab the newest 5.5.1 build (which will possible be the GA-build) and submit with that one. The build should be there in ~ 25m from this comment.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-27T12:28:23.000+0000", "updated": "2016-09-27T12:28:23.000+0000" }, { "id": "397627", "author": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "body": "Thanks. I've rebuilt with 5.5.1.GA and can't find contextId in the binary anymore. I've submitted the app to Apple. ", "updateAuthor": { "name": "cdr", "key": "cdr", "displayName": "Chris Rose", "active": true, "timeZone": "Europe/London" }, "created": "2016-09-29T12:45:06.000+0000", "updated": "2016-09-29T12:45:06.000+0000" }, { "id": "401460", "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.201611121409\r\nTi SDK 5.5.1.GA, 6.0.0.GA\r\nAppc NPM 4.2.9-1\r\nAppc CLI 6.1.0-13\r\nAlloy 1.9.4\r\nXcode 8.1 (8B62)\r\n\r\ncontextId no longer appears in the binary or packaged apps. Tested by creating multiple apps with run-on-main-thread off and on, then submitting them to the store. All submissions passed.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-11-17T18:52:44.000+0000", "updated": "2016-11-17T18:52:44.000+0000" } ], "maxResults": 16, "total": 16, "startAt": 0 } } }