{ "id": "163302", "key": "TIMOB-23924", "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": "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-22T02:01:05.000+0000", "created": "2016-09-19T11:16:15.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "focus", "private_api", "rejection", "symbols" ], "versions": [], "issuelinks": [ { "id": "52754", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "163314", "key": "TIMOB-23929", "fields": { "summary": "Rename contextId to stop confusing Apple's private API scan", "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": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2018-08-06T17:49:13.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": "Hi. Recently my app got rejected from Apple. This was all right few weeks ago. I used 5.1.1.GA and I didn't change anything significant. I also tried to resubmit app with 5.5.0.GA but that didn't go through also. \r\n\r\nAlso, noticed this is not isolated issue as one more developer experienced the same issue.\r\n\r\n\r\nHere is response from Apple:\r\n\r\nPerformance - 2.5.1\r\n\r\n\r\n Your app uses or references the following non-public APIs:\r\n\r\n focus:\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\r\n\r\nAnd more info about error in Ti SDK:\r\n\r\nThank you for your reply. Our team has re-reviewed this app to ensure our findings were accurate, we found this app contains references to the following selectors:\r\n\r\n\"focus:\" was found in the method -[TiRootViewController manuallyRotateToOrientation:duration:]\r\n\r\n\r\n\r\nPlease take a look at this asap. Thanks.", "attachment": [], "flagged": false, "summary": "iOS: Random app-rejection due to usage of non-public API", "creator": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "subtasks": [], "reporter": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "environment": "* Ti SDK 5.5.0.GA\r\n* Ti CLI 5.0.9\r\n* XCode 7.3", "closedSprints": [ { "id": 707, "state": "closed", "name": "2016 Sprint 19 SDK", "startDate": "2016-09-10T00:17:15.164Z", "endDate": "2016-09-24T00:17:00.000Z", "completeDate": "2016-09-26T05:17:04.253Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "396493", "author": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "I may have opened this issue in wrong project. Sorry :(", "updateAuthor": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-09-19T11:25:02.000+0000", "updated": "2016-09-19T11:25:02.000+0000" }, { "id": "396495", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Apple seems to go crazy now..The method is one of our own methods. I have an open discussion with them and will ping this ticket as soon as I receive a list of possible API's they have problems with.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T11:36:30.000+0000", "updated": "2016-09-19T11:36:30.000+0000" }, { "id": "396497", "author": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Thanks!", "updateAuthor": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-09-19T11:39:55.000+0000", "updated": "2016-09-19T11:39:55.000+0000" }, { "id": "396549", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "For now, please write Apple that it is no private API, but only a method that is called \"focus\". They can check [this line|https://github.com/appcelerator/titanium_mobile/blob/master/iphone/Classes/TiRootViewController.m#L1490] to validate.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-19T17:54:57.000+0000", "updated": "2016-09-19T17:54:57.000+0000" }, { "id": "396626", "author": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Thanks. The other developer that run into this issue said he managed to submit app after commenting out that line in generated XCode project. Are you aware of any possible issues if that's done?", "updateAuthor": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-09-20T07:40:29.000+0000", "updated": "2016-09-20T07:40:29.000+0000" }, { "id": "396820", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Well, it's the public {{focus()}} method that you are removing there. So when you are < iOS 8 and rotate the screen and a field is currently focussed, it won't refocus after the orientation change. So either Apple removed the selector from the (random) blacklist or we need to do method swizzling, which I really want to prevent. It would replace this:\r\n{code:objc}\r\n[kfvProxy focus:nil];\r\n{code}\r\nwith\r\n{code:objc}\r\n[kfvProxy performSelector:NSSelectorFromString([NSString stringWithFormat:@\"%@c%@:\", @\"fo\", @\"us\"]) withObject:nil];\r\n{code}\r\n\r\n(cc [~cng]: I will make all PR's from master to 5.5.x. You can decide if you take all or only master and 6_0_X)", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-21T13:47:29.000+0000", "updated": "2016-09-21T14:12:05.000+0000" }, { "id": "396821", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (master): https://github.com/appcelerator/titanium_mobile/pull/8408\r\nPR (6_0_X): https://github.com/appcelerator/titanium_mobile/pull/8409\r\nPR (5_5_X): https://github.com/appcelerator/titanium_mobile/pull/8410\r\n\r\nSteps to test:\r\n1. Create a new Titanium app\r\n2. Submit the app to the App Store\r\n\r\nExpected behavior: *No rejection!*", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-09-21T14:10:52.000+0000", "updated": "2016-09-21T14:10:52.000+0000" }, { "id": "396827", "author": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Thanks. At the end I managed to submit app by letting Apple know it's not non-public method. :)", "updateAuthor": { "name": "ivan.skugor", "key": "ivan.skugor", "displayName": "Ivan Skugor", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-09-21T14:53:55.000+0000", "updated": "2016-09-21T14:53:55.000+0000" }, { "id": "396898", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PRs merged.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-09-22T02:00:56.000+0000", "updated": "2016-09-22T02:00:56.000+0000" }, { "id": "440069", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Cleaning up older fixed issues. If this issue should not have been closed as fixed, please reopen.", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-08-06T17:49:13.000+0000", "updated": "2018-08-06T17:49:13.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }