iPhone应用程序被拒绝,因为Three20“非公共API”“lineHeight是”和“previousViewController”的

iPhone应用程序被拒绝,因为Three20“非公共API”“lineHeight是”和“previousViewController”的

问题描述:

我的应用程序,是因为本次非公开的API拒绝iPhone应用程序被拒绝,因为Three20“非公共API”“lineHeight是”和“previousViewController”的

3.3.1应用程序可能只使用在记录的API方式由苹果公司规定,不得使用或调用任何私有的API“

以下非公开的API都包含在你的应用程序: lineHeight是previousViewController

我能做些什么我ú? sed的three20-P31版本,但它仍然拒绝 。

Thx求助

这是个坏消息。这三个人已经删除了他们认为是私有API(窗口上的firstResponder)以及UITouch的一些私有实例成员的所有用途。

lineHeight定义为UIFont上的类别。我可以在标题转储中找到lineHeight的唯一参考是的DOMCSSStyleDeclaration类别。这是一个私人课程。所以在静态分析中看起来像是一个误报。

previousViewController定义在UIViewController的类别中。再次,这是UIViewController的成员没有暴露。

这不是个好消息。这意味着当你以类别命名你的成员时,你必须确保你不与Apple定义的任何私人名字冲突。不适合我吗?或者我误解了?

更新:我只是跑在我们的基于three20应用Erica的apiscanner工具,并得到了以下的输出:

检查152类方法,2038实例方法,和342层的功能

Potential public framework issues: 
[AddressBookUI]initialize override via AudioToolbox 
ALERT: -cancel: matches framework AddressBookUI. 
[AddressBookUI]description override via AudioToolbox 
[AddressBookUI]identifier override via AddressBook 
[AddressBookUI]label override via AddressBook 
[AddressBookUI]mailComposeController:didFinishWithResult:error: override via MessageUI 
ALERT: -messageFont matches framework AddressBookUI. 
[AddressBookUI]name override via AddressBook 
[AddressBookUI]numberOfSectionsInTableView: override via CoreData 
[AddressBookUI]path override via AudioToolbox 
ALERT: -performDefaultAction matches framework AddressBookUI. 
[AddressBookUI]reload override via MediaPlayer 
[AddressBookUI]resume override via AVFoundation 
[AddressBookUI]save override via AddressBook 
ALERT: -saveState matches framework AddressBookUI. 
[AddressBookUI]search override via CFNetwork 
[AddressBookUI]sectionIndexTitlesForTableView: override via CoreData 
ALERT: -selectedCell matches framework AddressBookUI. 
[AddressBookUI]setHighlighted: override via CoreAudio 
[AddressBookUI]setIdentifier: override via CoreAudio 
[AddressBookUI]setNeedsLayout override via QuartzCore 
[AddressBookUI]setPlaceholder: override via CoreAudio 
[AddressBookUI]setShowsCancelButton: override via CoreData 
[AddressBookUI]setStringValue: override via CoreAudio 
[AddressBookUI]setTableView: override via CoreData 
[AddressBookUI]storeType override via CoreData 
[AddressBookUI]tableView override via CoreData 
[AddressBookUI]tableView:numberOfRowsInSection: override via CoreData 
[AddressBookUI]tableView:sectionForSectionIndexTitle:atIndex: override via CoreData 
[AddressBookUI]tableView:titleForHeaderInSection: override via CoreData 
[AddressBookUI]text override via AddressBook 
[AddressBookUI]title override via AudioToolbox 
ALERT: dyld_stub_binding_helper() matches framework AVFoundation. 
[CoreData]connect override via AudioToolbox 
[CoreData]index override via AddressBook 
[CoreData]initWithURL: override via AVFoundation 
[CoreData]object override via AVFoundation 
[CoreData]release override via AudioToolbox 
[CoreData]reset override via AudioToolbox 
[CoreData]retain override via CFNetwork 
[CoreData]setURL: override via AddressBookUI 
[CoreData]setUserInfo: override via AudioToolbox 
[CoreData]timestamp override via AudioToolbox 
[CoreData]URL override via AVFoundation 
[CoreData]userInfo override via CFNetwork 
[CoreFoundation]setSelector: override via AudioToolbox 
[CoreFoundation]kCFRunLoopDefaultMode override via AudioToolbox 
[CoreLocation]coordinate override via AudioToolbox 
[CoreLocation]location override via AudioToolbox 
[CoreLocation]x override via AVFoundation 
[CoreLocation]y override via AVFoundation 
[Foundation]cancel override via AddressBookUI 
[Foundation]method override via AVFoundation 
[Foundation]position override via AVFoundation 
[Foundation]protocol override via AVFoundation 
[Foundation]request override via AudioToolbox 
[Foundation]response override via CFNetwork 
[Foundation]result override via AVFoundation 
[Foundation]scheme override via AudioToolbox 
[Foundation]setCachePolicy: override via CoreAudio 
[Foundation]setSuspended: override via CoreData 
[Foundation]NSCocoaErrorDomain override via CoreData 
[GameKit]dismiss override via AddressBookUI 
[GameKit]icon override via MessageUI 
[GameKit]layout override via AudioToolbox 
[GameKit]layoutIfNeeded override via QuartzCore 
[GameKit]origin override via AudioToolbox 
[GameKit]setAnimating: override via CoreData 
[GameKit]setIcon: override via AddressBookUI 
[GameKit]setResult: override via AddressBookUI 
ALERT: -statusView matches framework GameKit. 
ALERT: +sharedCache matches framework MapKit. 
[MapKit]color override via CoreGraphics 
[MapKit]direction override via AudioToolbox 
[MapKit]distance override via AudioToolbox 
ALERT: -flushRequestQueue matches framework MapKit. 
[MapKit]height override via CoreAudio 
[MapKit]image override via AddressBook 
ALERT: -locationManager:didFailWithError: matches framework MapKit. 
[MapKit]mode override via AddressBookUI 
[MapKit]offset override via AVFoundation 
[MapKit]setBounds: override via AddressBookUI 
[MapKit]setEnabled: override via AudioToolbox 
[MapKit]setMode: override via AddressBookUI 
[MapKit]setOffset: override via AddressBookUI 
[MapKit]setPosition: override via AddressBookUI 
[MapKit]setScrollEnabled: override via CoreAudio 
[MapKit]setSelected: override via AudioToolbox 
[MapKit]setSize: override via AddressBookUI 
[MapKit]setSubtitle: override via AudioToolbox 
[MapKit]setView: override via AddressBookUI 
[MapKit]setZoomEnabled: override via CoreAudio 
[MapKit]size override via AudioToolbox 
[MapKit]view override via AddressBookUI 
[MediaPlayer]bounds override via AudioToolbox 
[MediaPlayer]display override via AddressBook 
ALERT: -fadeOut matches framework MediaPlayer. 
[MediaPlayer]item override via AddressBook 
[MediaPlayer]items override via AudioToolbox 
[MediaPlayer]orientation override via CoreLocation 
[MediaPlayer]padding override via AudioToolbox 
ALERT: -scrollToTop matches framework MediaPlayer. 
[MediaPlayer]selected override via AddressBookUI 
[MediaPlayer]setDuration: override via AddressBookUI 
[MediaPlayer]setOrientation: override via CoreAudio 
ALERT: -setOrientation:animated: matches framework MediaPlayer. 
[MediaPlayer]setPadding: override via AudioToolbox 
[MediaPlayer]setViewController: override via AddressBookUI 
[MessageUI]content override via AudioToolbox 
ALERT: -contentType matches framework MessageUI. 
ALERT: -send: matches framework MessageUI. 
[MessageUI]setContent: override via AudioToolbox 
[MessageUI]setIsLoading: override via CoreData 
[MessageUI]setSubject: override via AudioToolbox 
[MessageUI]setText: override via AddressBookUI 
[MessageUI]subject override via CoreGraphics 
ALERT: -subjectField matches framework MessageUI. 
[QuartzCore]frame override via AudioToolbox 
[QuartzCore]level override via AVFoundation 
[QuartzCore]mask override via CoreGraphics 
[QuartzCore]setMask: override via AddressBookUI 
[QuartzCore]setStyle: override via AddressBookUI 
[UIKit]shape override via QuartzCore 
[UIKit]animating override via MapKit 
[UIKit]beginUpdates override via CoreData 
ALERT: -childCount matches framework UIKit. 
[UIKit]control override via AVFoundation 
[UIKit]controller override via AddressBookUI 
[UIKit]destination override via AudioToolbox 
[UIKit]highlighted override via MapKit 
ALERT: -initWithController: matches framework UIKit. 
ALERT: -initWithNode: matches framework UIKit. 
[UIKit]node override via AudioToolbox 
[UIKit]numberOfRowsInSection: override via CoreData 
ALERT: -phoneNumber matches framework UIKit. 
ALERT: -previousViewController matches framework UIKit. 
[UIKit]progress override via CFNetwork 
[UIKit]setColor: override via AddressBookUI 
[UIKit]setContentInset: override via CoreData 
[UIKit]setContentMode: override via CoreAudio 
[UIKit]setControl: override via AudioToolbox 
[UIKit]setCurrentPage: override via CoreAudio 
[UIKit]setDataSource: override via CoreAudio 
[UIKit]setDestination: override via CoreAudio 
[UIKit]setFont: override via AddressBookUI 
[UIKit]setInset: override via AddressBookUI 
[UIKit]setItems: override via AddressBookUI 
[UIKit]setLineBreakMode: override via CoreAudio 
[UIKit]setMinimumFontSize: override via CoreData 
[UIKit]setNumberOfLines: override via CoreAudio 
[UIKit]setNumberOfPages: override via CoreAudio 
[UIKit]setObject: override via AddressBookUI 
[UIKit]setOrigin: override via AddressBookUI 
[UIKit]setProgress: override via AudioToolbox 
[UIKit]setReturnKeyType: override via CoreAudio 
[UIKit]setRowHeight: override via CoreData 
[UIKit]setShadowColor: override via CoreAudio 
[UIKit]setShadowOffset: override via CoreData 
[UIKit]setStatusBarStyle: override via CoreAudio 
[UIKit]setTabBar: override via AddressBookUI 
[UIKit]setTableViewStyle: override via CoreAudio 
[UIKit]setTextAlignment: override via CoreAudio 
[UIKit]setTextColor: override via CoreData 
[UIKit]setTintColor: override via CoreData 
[UIKit]setWidth: override via AddressBookUI 
[UIKit]setX: override via AddressBook 
[UIKit]setY: override via AVFoundation 
ALERT: -startTapTimer: matches framework UIKit. 
ALERT: -stopAnimation: matches framework UIKit. 
[UIKit]userData override via AudioToolbox 

After Public Frameworks Scan: 
    4 whitelisted class methods, 1 blacklisted class methods 
    322 whitelisted instance methods, 21 blacklisted instance methods 
    115 whitelisted functions, 1 blacklisted functions 

Potential private framework issues: 
[ActorKit]queue override via AudioToolbox 
[ActorKit]send override via AddressBookUI 
[AppSupport]hostname override via CFNetwork 
[AppSupport]setHostname: override via AudioToolbox 
[Calendar]setUrl: override via AddressBookUI 
ALERT: -tomorrow matches private framework CalendarUI. 
ALERT: -initWithDelegate: matches private framework Celestial. 
[Celestial]setQueue: override via AddressBookUI 
ALERT: -initWithText: matches private framework ChatKit. 
[ChatKit]refresh override via AVFoundation 
[ChatKit]setIsAnimating: override via CoreAudio 
[ChatKit]setRecipients: override via CoreAudio 
ALERT: -addText: matches private framework CoreTelephony. 
[CoreTelephony]setContentType: override via CoreAudio 
[DataAccess]body override via CFNetwork 
[DataAccess]children override via CoreData 
[DataAccess]from override via AVFoundation 
ALERT: -httpMethod matches private framework DataAccess. 
ALERT: -initWithQuery: matches private framework DataAccess. 
[DataAccess]parent override via AddressBookUI 
[DataAccess]setBody: override via AddressBookUI 
[DataAccess]setFrom: override via AddressBookUI 
[DataAccess]setTo: override via AddressBook 
[DataAccess]to override via AVFoundation 
ALERT: -userAgent matches private framework DataAccess. 
ALERT: -addChild: matches private framework DAVKit. 
[DAVKit]setUserAgent: override via CoreData 
[GMM]parameters override via AudioToolbox 
[GMM]radius override via CoreGraphics 
[GMM]setAuthor: override via AddressBookUI 
[GMM]setDirection: override via CoreData 
[GMM]setParameters: override via CoreAudio 
[GMM]setRadius: override via AddressBookUI 
[GMM]setRequest: override via AudioToolbox 
[GMM]setSearchResults: override via CoreAudio 
ALERT: -initWithData:encoding:options:error: matches private framework iCalendar. 
ALERT: -initWithData:options:error: matches private framework iCalendar. 
ALERT: +mainQueue matches private framework iTunesStore. 
ALERT: -cacheKey matches private framework iTunesStore. 
ALERT: -expirationDate matches private framework iTunesStore. 
ALERT: -imageURL matches private framework iTunesStore. 
ALERT: -initWithIdentifier: matches private framework iTunesStore. 
[iTunesStore]kind override via AudioToolbox 
[iTunesStore]setButtons: override via AudioToolbox 
[iTunesStore]setResponse: override via AudioToolbox 
ALERT: -createDataSource matches private framework iTunesStoreUI. 
ALERT: -deleteRowAtIndexPath: matches private framework iTunesStoreUI. 
ALERT: -loadingView matches private framework iTunesStoreUI. 
ALERT: -locationManager:didUpdateToLocation:fromLocation: matches private framework iTunesStoreUI. 
ALERT: -removeItemAtIndexPath: matches private framework iTunesStoreUI. 
[iTunesStoreUI]setSections: override via AudioToolbox 
ALERT: -textForFieldAtIndex: matches private framework iTunesStoreUI. 
[iWorkImport]bottom override via CoreGraphics 
[iWorkImport]cells override via CoreGraphics 
ALERT: -columnCount matches private framework iWorkImport. 
[iWorkImport]header override via AudioToolbox 
[iWorkImport]left override via AudioToolbox 
[iWorkImport]right override via AVFoundation 
ALERT: -rowCount matches private framework iWorkImport. 
[iWorkImport]setBottom: override via AddressBookUI 
[iWorkImport]setHeader: override via AddressBookUI 
[iWorkImport]setLeft: override via AddressBookUI 
[iWorkImport]setRight: override via AddressBookUI 
[iWorkImport]setTop: override via AddressBookUI 
[iWorkImport]spacing override via CoreGraphics 
[iWorkImport]top override via AVFoundation 
ALERT: -childAtIndex: matches private framework Message. 
[Message]headers override via AudioToolbox 
ALERT: -logout matches private framework Message. 
ALERT: +elementWithName: matches private framework MobileQuickLook. 
ALERT: +elementWithName:stringValue: matches private framework MobileQuickLook. 
ALERT: -insertChild:atIndex: matches private framework MobileQuickLook. 
ALERT: -rootElement matches private framework MobileQuickLook. 
ALERT: -rootName matches private framework MobileQuickLook. 
[MobileQuickLook]setPointSize: override via CoreData 
[MobileQuickLook]setVerticalAlignment: override via CoreData 
ALERT: -XMLString matches private framework MobileQuickLook. 
ALERT: -attributeForName: matches private framework OfficeImport. 
[OfficeImport]color1 override via CoreGraphics 
[OfficeImport]color2 override via CoreGraphics 
[OfficeImport]highlight override via AddressBookUI 
ALERT: -isModified matches private framework OfficeImport. 
[OfficeImport]map override via AudioToolbox 
[OfficeImport]next override via AudioToolbox 
ALERT: -pageHeight matches private framework OfficeImport. 
ALERT: -pageWidth matches private framework OfficeImport. 
[OfficeImport]setColor1: override via AddressBookUI 
[OfficeImport]setColor2: override via AddressBookUI 
[OfficeImport]setColumnCount: override via CoreAudio 
[OfficeImport]setHeight: override via AddressBookUI 
[OfficeImport]setHighlight: override via CoreData 
[OfficeImport]setShadow: override via AddressBookUI 
[OfficeImport]setSpacing: override via AudioToolbox 
[OfficeImport]setTransition: override via CoreAudio 
[OfficeImport]shadow override via CoreGraphics 
[OfficeImport]shape override via QuartzCore 
[OfficeImport]transition override via CoreData 
[OfficeImport]URI override via CoreData 
ALERT: -initWithPhoto: matches private framework PhotoLibrary. 
ALERT: -updatePlaceholder matches private framework PhotoLibrary. 
[Preferences]loading override via AudioToolbox 
ALERT: -addRequest: matches private framework ProtocolBuffer. 
[ProtocolBuffer]requests override via AudioToolbox 
[Symbolication]className override via CoreData 
[Symbolication]setNext: override via AddressBookUI 
[UIAccessibility]element override via AudioToolbox 
ALERT: -nextAction matches private framework VoiceServices. 
[WebCore]blur override via CoreGraphics 
ALERT: -caption matches private framework WebCore. 
ALERT: -firstChild matches private framework WebCore. 
ALERT: -lastChild matches private framework WebCore. 
ALERT: -lineHeight matches private framework WebCore. 
ALERT: -localName matches private framework WebCore. 
ALERT: -nextSibling matches private framework WebCore. 
ALERT: -outerHTML matches private framework WebCore. 
ALERT: -outerText matches private framework WebCore. 
ALERT: -parentNode matches private framework WebCore. 
ALERT: -previousSibling matches private framework WebCore. 
ALERT: -screenX matches private framework WebCore. 
ALERT: -screenY matches private framework WebCore. 
[WebCore]setCaption: override via AddressBookUI 
[WebCore]setClassName: override via CoreData 
[WebCore]setMargin: override via AddressBookUI 
[WebCore]setShape: override via AddressBookUI 
ALERT: -contentFrame matches private framework WebKit. 
ALERT: -parentFrame matches private framework WebKit. 
ALERT: -showStatus: matches private framework WebKit. 
ALERT: -failWithError: matches private framework YouTube. 

After Private Frameworks Scan: 
    4 whitelisted class methods, 4 blacklisted class methods 
    414 whitelisted instance methods, 73 blacklisted instance methods 
    115 whitelisted functions, 1 blacklisted functions 

Potential blacklist items: 
    +sharedCache 
    +mainQueue 
    +elementWithName: 
    +elementWithName:stringValue: 
    -cancel: 
    -messageFont 
    -performDefaultAction 
    -saveState 
    -selectedCell 
    -statusView 
    -flushRequestQueue 
    -locationManager:didFailWithError: 
    -fadeOut 
    -scrollToTop 
    -setOrientation:animated: 
    -contentType 
    -send: 
    -subjectField 
    -childCount 
    -initWithController: 
    -initWithNode: 
    -phoneNumber 
    -previousViewController 
    -startTapTimer: 
    -stopAnimation: 
    -tomorrow 
    -initWithDelegate: 
    -initWithText: 
    -addText: 
    -httpMethod 
    -initWithQuery: 
    -userAgent 
    -addChild: 
    -initWithData:encoding:options:error: 
    -initWithData:options:error: 
    -cacheKey 
    -expirationDate 
    -imageURL 
    -initWithIdentifier: 
    -createDataSource 
    -deleteRowAtIndexPath: 
    -loadingView 
    -locationManager:didUpdateToLocation:fromLocation: 
    -removeItemAtIndexPath: 
    -textForFieldAtIndex: 
    -columnCount 
    -rowCount 
    -childAtIndex: 
    -logout 
    -insertChild:atIndex: 
    -rootElement 
    -rootName 
    -XMLString 
    -attributeForName: 
    -isModified 
    -pageHeight 
    -pageWidth 
    -initWithPhoto: 
    -updatePlaceholder 
    -addRequest: 
    -nextAction 
    -caption 
    -firstChild 
    -lastChild 
    -lineHeight 
    -localName 
    -nextSibling 
    -outerHTML 
    -outerText 
    -parentNode 
    -previousSibling 
    -screenX 
    -screenY 
    -contentFrame 
    -parentFrame 
    -showStatus: 
    -failWithError: 
    dyld_stub_binding_helper() 
+0

我看到你贴在three20组。也许你应该通过github给家伙发邮件?同样重要的是,我们需要苹果关注这一点。他们真的需要揭露他们的静态分析器在做什么。 – lyonanderson 2009-12-08 09:54:38

+0

它有助于重命名“lineHeight”和“previousViewController”吗? – CuSoon 2009-12-08 09:57:24

+0

在这种情况下应该有所帮助。问题是,我们什么时候停止?几个星期前,有三个人因为其他原因被拒绝。现在这个。苹果正在进行的静态分析并不完全正确。 – lyonanderson 2009-12-09 00:23:01

重命名的两个选择这是造成问题的原因。怎么样“-cuSoonPreviousViewController”和“-cuSoonLineHeight”?这将阻止他们被分析仪标记。从Xcode重构它们,这样你也可以改变它们被调用的任何地方。

我们将在Three20中推送一些重命名这些方法的提交。本周某个时候找他们。

虽然这些误报确实令人沮丧。

- 编辑

我发送一封电子邮件,并提交了关于这个问题的bug报告。播放方法名称whack-a-mole在这里不完全是一个可扩展的解决方案。

+0

刚刚收到苹果公司的“处理它”的回应。 – featherless 2009-12-11 06:12:52

+0

我刚刚在最新的App Store修复中承诺了本周的更改。 Three20现在应该在其当前版本中是App Store安全的。 – featherless 2009-12-12 03:36:32

+0

Three20 at master: http://github.com/facebook/three20 The Three20 roadmap: http://three20.info/blog/2009/12/the-three20-roadmap/ – featherless 2009-12-12 03:37:06

Core Data管理对象似乎有类似的问题。

刚刚被拒绝使用私有API setThoroughfare: 我有一个名为thoroughfare的属性的管理对象,setThoroughfare是通过数据模型动态生成的。

在我的代码中没有任何地方我在MKPlaceMark上调用setThoroughfare,我认为这是他们所指的。