Mac App Store Apps rejected due to the use of BWToolkit
Reported by MOApp | December 27th, 2010 @ 06:21 AM
All my Apps for the upcoming Mac App Store have just been rejected :-(
"We've reviewed your apps and are unable to post these versions to the App Store because they are using a private API. The use of non-public APIs is not permissible, as documented in section 2.5 of the App Store Review Guidelines https://developer.apple.com/appstore/mac/resources/approval/guidelines.html. We have included additional details below to help explain the issue, and hope you’ll consider revising and resubmitting your application.
Using private APIs can lead to a poor user experience should these APIs change in the future. The non-public API (NSTokenAttachmentCell._tacFlags) that is included in your application comes from the following private Apple frameworks - <AppKit.framework>."
I guess BWToolkit is used on 40/50% of all apps out there :-)
- Am I the only one?
- Are there more 'privat' things used in BWToolkit one has to take care about?
Thanks in advance.
Comments and changes to this ticket
I received the same email today. I looked into this and this doesn't seem to be the only use of private API. In the project there are currently four private Cocoa Header files:
- NSTokenAttachment.h - NSTokenAttachmentCell.h - NSWindow-NSTimeMachineSupport.h - NSCustomView.h
I'll try to remove them from my branch or remove the framework from my app before I resubmit.
I don't think there's any way to customize a token field like that without private API. I'd suggest replacing the token fields with standard ones.
In terms of other private API in BWToolkit, most of it's used in the .ibplugin part of the project and doesn't get compiled into the binary. Some of it's used in the framework to make IB integration work better. For instance, NSCell's _textAttributes is overridden instead of using -setAttributedStringValue: so styles get updated live as you change cell titles in IB.
Since the rejections here are only regarding modifying private ivars (which only BWTokenField does, as far as I recall), hopefully they're just looking for private ivar use and not private method use. Or maybe they've whitelisted _textAttributes as something that's permissible to override.
In any case, Apple has deprecated IB plugins with Xcode 4, which is why I haven't been updating it and why it's probably not worth the time to rewrite the framework to not use private API. Please file bugs with Apple to add IB plugin support to Xcode 4. Once they do, I'll start working on v2.0.
Does this mean compiling BWToolkit from source without the BWTokenField classes? If that's the case I can compile/reject/re-submit without the token field classes. What I'm concerned about is the existence of the private headers is enough to warrant a rejection. It seems like Apple has been pretty specific about naming the private API calls in their rejection notices. Since rejections related to BWToolkit only seem to mention the private ivars in the token field category, I guess we're safe to assume that's all we need to remove?
byteproject has released a new verson of BWToolkit without call to private APis
it's available here: http://byteproject.net/post/3016833303/bwtoolkit-1-2-5-w-o-private-api
Probably essentially the same thing that byteproject did, but on github:
It's on my master branch, here are the commits I made on top of 1.2.5 so you can see the diffs (click on the link on the commit hash):
The vendor branch is essentially the code from Brandon Walkin's mercurial repo.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
BWToolkit is an Interface Builder plugin that contains commonly used UI elements and other objects designed to simplify Mac development.