Three20というすばらしいiPhone向けオープンソースライブラリがありますが、これがどうも、Undocumented APIを含んでしまっているようです。Three20のコードを含んだアプリをAppStoreに提出したのですが、この件でRejectをくらいました。作者様にはさきほどメールしておいたのですが、いちおうどこがまずそうなのかをとりいそぎということで。
@implementation UITouch (TTCategory) - (id)initInView:(UIView *)view location:(CGPoint)location { if (self = [super init]) { _tapCount = 1; _locationInWindow = location; _previousLocationInWindow = location; UIView *target = [view.window hitTest:_locationInWindow withEvent:nil]; _view = [target retain]; _window = [view.window retain]; _phase = UITouchPhaseBegan; _touchFlags._firstTouchForView = 1; _touchFlags._isTap = 1; _timestamp = [NSDate timeIntervalSinceReferenceDate]; } return self; } - (void)changeToPhase:(UITouchPhase)phase { _phase = phase; _timestamp = [NSDate timeIntervalSinceReferenceDate]; } @end
http://github.com/joehewitt/three20/blob/master/src/UIViewAdditions.m#L47-64
の黄色くハイライトされたあたりです。このUITouchクラスのメンバ変数にはcategoryを使うとアクセスできてしまいますが、これはやはりまずそうです。
こういったOpen Sourceのコードを使う上では、ライセンス上、AS ISになっていますので、コード作者ではなく、もちろん使う側に責任があります。使う上ではこういったリスクもあります。
おそらく今後もこういったことは起きないとも限らないので、ビルドしたあと、そのバイナリを静的に解析して、そのアプリでUndocumented APIやPrivate APIが使われていないかどうかをチェックするツールが欲しいなあと思ったのですが(たぶんAppleも審査時にこういう方法で試験しているものと思います)、こういったものって、存在するんでしょうか?
もしないとすると、とりあえず作ろうと思っています。多分、PublicなFrameworkのヘッダをすべてスキャンして、使えるAPIのリストを作り、なおかつビルド後のバイナリからclass-dump-xなど経由ですべての使用しているAPIのリストをとり、その差分を取ることで、これが可能な気もしています。が、できるのかなあ。。もしこの辺の情報お持ちの方おられましたら、@takuma104 あたりまでコメントお願いできればと思います。
(追記)
Three20のこの件は、すでに既出の話題だったのを教えていただきました。うーん、、御本人はレスしてないかあ。とりあえず fork してこの辺のコードを削除してpull request送るとかなんでしょかね。こういう場合。
http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139
AppStoreへの提出アプリがPending Contractで嵌らない為の最低条件は何か? - Takuma104.m - iPhoneアプリ開発グループに関連して。
僕は、iTSPayments@apple.comとdevcontracts@apple.comそれぞれに以下のような文面でメールしたら住所が英語になりました。(ただし、どちらとも返事がなかった)また、iTunes株式会社からもその前に住所問い合わせのメールがあったので、いまいち意味あるかわからないんですが。。
英語はちょっと自信ないですがw,もしよろしければ、なにかの参考まで。
To whom it may concern, I'm a iPhone Developer Program member. I'm asking for pending contract problem. I've been in pending contract problem for more then three weeks. I don't know that it relate to the issue, I found some bugs in Contact Info "Company (Legal Entity) Address". It seems my address is unreadable. (It might be Japanese Character.) The following currently displayed. -- ??? ?????? ???? City:?????? State/Province:??? Zip/Postal Code:100-0000 Country:Japan The following is correct info. -- #301 hogehoge City: Ohta-ku State/Province: Tokyo Zip/Postal Code:100-0000 Country:Japan Would you please fix it? Best regards, --- Takuma Mori <takuma@104.net> #301 hogehoge, Ohta-ku Tokyo, Japan Person ID: ***** Application Name: ****** Apple ID: ******
いま僕のアプリ(NatsuLiphone)は、FreeAppとして提出しているにもかかわらず、3週間以上Pending Contractの刑を食っているという謎な状況になっています。*1
iTunes Connect の "Contracts, Tax, & Banking Information" の "Your Contracts In Process" 部分のスクリーンショットはこんな感じで、Free Applicationのところの "Setup Complete" がグリーンになっていないことが分ります。

週末Twitterで、実際にFreeアプリケーションをAppStoreでリリースされている方に状況とかを確認してみたのですが、総合すると、どうやら問題は、
アプリの審査終了時点(Ready for Saleメールが来た段階)で、"Contracts, Tax, & Banking Information"画面の、Paid ApplicationのContact InfoのEditで見れる"Company (Legal Entity) Address"が化けないで(??とかにならないで)表示されている
というのが1つの条件になるようです。また、名前の部分も僕の場合「琢磨 Mori」などとなっていますが、これは問題にならないようです。*2 ということで、ここの住所部分が文字化けしている人は、アプリを申請する前にでも、iTSPayments @ apple.com もしくは、 devcontracts @ apple.com にメールするなりして修正してもらったのを確認してから提出するのが良いと思われます。また7/11以前にDev Programsに加入できた人は、どうやらここの住所はiTunes Storeの情報ではない(?)ようなので、7/11以降に加入した人が対象になっているものと思われます。
それで、結局僕のほうは、これが2日前に修正されたわけなのですが、一向にまだPending Contract状態のままです。もしかすると、いまのこの状態から、このPending Contractを解除する人が仕事をちゃんとしていないのではないか、という余計な邪推もできます。今週動きがなかったら、また電話するなりしてみようと思います。
*1:Pending Contract問題については、fladdictさんのまとめが分りやすいかと思います
*2:なぜかというと、Rejaw for iPhoneなどが、ここが漢字のまま公開されているためです
ku-sukeなぜか僕の画面とちょっと違うのは、個人と法人の区分でしょうか?
http://f.hatena.ne.jp/ku-suke/20081014141255
takuma104お返事遅れました。。"Your Contract in Effect"になってれば、それはContract処理は終了ということなので、ku-sukeさんの場合は、Pending Contract にはならないかと思われます。
takuma104ちなみにPending Contractから1ヶ月ぐらいで脱出組なのですが、現状は、in Effectのところで、こんな表示になっています。
http://gyazo.com/9b57556c0941d937b2c4c7bb1997170d.png
NDA | |
![]()
ここで行われているようです。
http://www.ipetitions.com/petition/iPhoneNDA/index.html
さっそく僕も署名しました。NDA自体は廃止してもらったほうが良いとは思いますが、全廃じゃなくても、個人的には以下の3つが出来るようになれば良いと考えているので、そのように署名コメントしてみました。
なおこの署名サイト iPetitions は、署名すると、「iPetitionsサイト維持のために、募金してくれ画面」が出ますが、任意でないようで実は任意です。募金しないでも、署名自体は行われますので、ご注意ください。
AmalI'm not easily irmpessed. . . but that's impressing me! :)
wagaodhGZB9Y <a href="http://sjouojouyeuw.com/">sjouojouyeuw</a>
mqkpiklhA3oTad , [url=http://rukzmtsadatf.com/]rukzmtsadatf[/url], [link=http://emyloqfpchho.com/]emyloqfpchho[/link], http://mljqprrdbomh.com/
acuasjz6lcvrm , [url=http://xhrfwtqmhefk.com/]xhrfwtqmhefk[/url], [link=http://ncwfgjkqcdui.com/]ncwfgjkqcdui[/link], http://ojjbhoksvoht.com/
yazpogpvgjQnxBc , [url=http://xcukgoctfrnf.com/]xcukgoctfrnf[/url], [link=http://nxrcrjhjhffi.com/]nxrcrjhjhffi[/link], http://pxwrwckkabvj.com/
vvtxhwaQgI9F , [url=http://gigqvvyodnda.com/]gigqvvyodnda[/url], [link=http://nmfqewycgafr.com/]nmfqewycgafr[/link], http://wxemrlcutonv.com/
fokqbwcoonak2mBKU , [url=http://wltwrxaqpxzx.com/]wltwrxaqpxzx[/url], [link=http://xisrhhlctufv.com/]xisrhhlctufv[/link], http://mjruhhcbndgy.com/
ltmpeutoxBPwR3M , [url=http://mfpkprmttwtw.com/]mfpkprmttwtw[/url], [link=http://tgxgwdhviwii.com/]tgxgwdhviwii[/link], http://blnhclqmleue.com/
ogvylscrdtNMRuLV <a href="http://gxejemqsqsfk.com/">gxejemqsqsfk</a>
hszhxk7qMEYY , [url=http://ybwtdmvfcppf.com/]ybwtdmvfcppf[/url], [link=http://bowclkezixjt.com/]bowclkezixjt[/link], http://sqonhwdgectn.com/
iPhone SDKを使った(と思われる)ソースコードをいくつか見つけたので貼っておきます。ここに挙げたもののほかに、yanbeさんが見つけたZXing も、それっぽいです。
そもそもNDA的に、SDK開発を行ったアプリケーションをオープンソースにできるのかどうかは良くわかってません。いまのところ、少なくとも Wordpress および MyMote は AppStore にて配布されている(つまりAppleの審査を通過した)ようです。
Mythtv frontends
Library for Exif tag manipulation in images directly on iPhone
unit test
UITouch.hを見ると、これらのインスタンス変数はprotectedなので、サブクラスからでもアクセスできますし、「物理的」には問題ないはずです。
ただ、気になるのは、
// Note: all instance variables will become private in the future. Do not access directly.
というコメントがひっそりと書かれていることです。これに抵触しているということでしょうか。。。
もしそうだとすると、ふつうは気付かないですし、機械的にチェックするのは難しいかもしれないですね。
Appleの方で、こういうバラバラな情報を、どこか1ヶ所に集めて公開してほしいところです。
せめて、審査に関わるような、ヘッダのコメントには、共通のタグをつけてくれるくらいは、してほしいと思います。
内容が、はずれてたらすみません。。
何か、いい解決方法が見つかるといいですね。
ですね。基本すべてのメンバ変数への直接のアクセスはNGのようですね。
あと、AppleのiPhone SDK Agreement 3.3.1条項の姿勢としては、ドキュメントに載ってないのは
NGとしているような気がしていて、ヘッダからのスキャンだと差がある可能性もあって、
不十分かもですねえ。
手作業で作るのも相当面倒そうだし、、こういう情報をwiki的に編集できるようにして、みんなで編集してもらうとかしかないかなあ。。
> ですね。基本すべてのメンバ変数への直接のアクセスはNGのようですね。
そう解釈するのが安全な気がしますね。
UIKit.frameworkの中のヘッダファイルを、いくつか見てみたんですが、インスタンス変数にスコープが切られてないのは、UITouchくらいな気がします。
きっと、privateとかpackageにすると、都合が悪いことがあるんでしょうね。。
何だか、例外的なこと(バグ??)のような感じなので、審査時にわかってるんであれば、リリースノートには書いておいてほしいところです。
> 手作業で作るのも相当面倒そうだし、、こういう情報をwiki的に編集できるようにして、みんなで編集してもらうとかしかないかなあ。。
そういう場があれば、ありがたいですね。。
でも、そこまでしなくてもいい状況になるのが、もっとありがたいですね ;)