むらかみの雑記帳

Android とか iOS とかソフトウェア開発に関するネタ帳

Xcode 4.3.2 の LLVM 3.1 コンパイラの ARC 最適化バグを踏んでしまった

Apple LLVM3.1 Compiler の -O1 以上の最適化をかけてコンパイルすると、ARC のリファレンスカウントがおかしくなってクラッシュする現象が発覚。(CashFlow はこれが原因でクラッシュしてました)

以下のコードで完全に再現します。

    UIButton *b, *b1, *b2;
    
    for (int i = 0; i < 2; i++) {
        b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        if (i == 0) {
            b1 = b;
        } else {
            b2 = b;
        }
    }
    b = nil;
    
    int rc1 = CFGetRetainCount((__bridge void *)b1);
    int rc2 = CFGetRetainCount((__bridge void *)b2);

rc1, rc2 にはそれぞれ b1, b2 のリファレンスカウントが入ります。こいつは両方共2になるはずです (b1, b2 自身、および autorelease プールからの参照で2)。ですが、rc1 のほうが1になります。このため、メモリを二重解放しようとして落ちます。

うん、これじゃ ARC 使用時は怖くて最適化できませんな。さて、、、バグ報告、Apple のどこにすればいいんだっけ?

追記: https://bugreport.apple.com/ からバグ報告しました。

開発者向けに Google Play と AppStore のアプリ販売消費税の扱いの違いをまとめてみた

Google Play や Apple AppStore でのアプリ販売について、開発者・販売者の立場から見た時の消費税の扱いが全然違うっぽい。ので、調査したメモを備忘録として書いておきます。さしあたり、日本国内向けについてだけです。

注意:私は税務の専門家じゃないので、内容については一切保証しません。不安があるかたは税の専門家に相談してください。この記事に信じたことによって何らかの損害を被ったとしても、当方は一切関知いたしません。

Apple AppStore の場合

Apple AppStore での消費税の扱いについて。

  • 日本国内の売上に関しては iTunes KK が代理店(Agent)として販売を代行します。iTunes KK は日本国内の法人です。
  • (日本に限りませんが)開発者は課税設定は一切行う必要はありません。全部 Apple 側が指定します。
  • 日本国内売上については、売上の 5% の消費税が iTunes KK により徴収されます。ただし、消費税を当局に納めるのは開発者の責任です。
  • AppStore 上でユーザに提示される価格は税込価格です。
  • 国内売上手数料の支払先は iTunes KK です。
  • iTunes KK に支払う 30 % の手数料(コミッション)は、税込価格の 30% です。手数料には消費税が含まれます。当然ですが、手数料に含まれる消費税は、iTunes KK が日本の当局に納めることになります。

なお、有料販売の契約書にも消費税のことはきちんと書かれています。

4. Delivery of Licensed Applications to end-users in Japan

Where You designate iTunes KK to allow access to the Licensed Applications to end-users in Japan:

4.1 You acknowledge and agree that You have the sole responsibility for: (i) consumption tax output liability,
if any, with respect to delivery on Your behalf of Your Licensed Applications to end users by iTunes KK; (ii)
filing of consumption tax returns and payment of consumption tax to the Japanese government, if applicable;
and (iii) determining independently, in consultation with Your own tax advisor, Your taxpayer status and tax
v12
payment obligations for consumption tax purposes.

4.2 Commissions charged by iTunes KK to Japan resident developers will include consumption tax.

また、毎月一度 Apple から "JCT Tax Advice" という文書(JCT は Japan Consumption Tax の略)が PDF で送られてくるのですが、ここに消費税額が明記されています。具体的にはこんな感じの表示になります (金額は架空)

財務情報
  売上金                105,000
  コミッション(税込み)  -31,500
  計                               73,500

コミッション請求
  コミッション          -30,000           
  消費税                            -1,500
  計                               -31,500

ここでは、売上が税込105,000円の場合を例にしています。この場合、Appleに支払う手数料は税込31,500円になります。

Google Play の場合

これに対し、Google Play の場合は、正直わけわかめです。

  • Google Play では、アプリの販売は売主と買主の直接契約とされています(これはGoogle Walletの販売者向け利用規約に記載されています)。
    • AppStore が代理店経由となっているのとは対照的です。
  • 開発者は課税設定を自分の責任で行わなければなりません。Google は面倒見てくれません。
    • 開発者は Google Checkout サイト上で、各地域ごとの税率設定を行う必要があります。
  • 国内売上については、上記税率設定で計算される消費税を含む金額が Google Payment Japan により徴収されます。消費税を当局に納めるのは開発者の責任です。(これはAppStoreと同じ)
  • Google Play 上でユーザに提示される価格は税抜価格です。('12/5/21から税込価格に変更になります。詳細は追記参照)
    • 消費税の総額表示義務的にどうなんでしょうか、、、。もちろん購入確認時には税込価格は表示されますが。
    • なお、総額表示になっているアプリもありますが、これは税率を指定していない(0%に指定している)ベンダです。詳細は1つ前のエントリに書きました。
  • 手数料の支払先が誰なのか不明確です。米国 Google Inc. なのか、日本の Google Payment Japan なのかどっちかはっきりしません。Android マーケット デベロッパー販売/配布契約書を見るかぎりでは米国 Google Inc. だろうとは思うのですが、Google Wallet の契約書が対 Google Payment Japan なので混乱ぎみ。
  • 手数料は売上の 30% ですが、これは税抜価格の 30% として計算されます。手数料には消費税が含まれるのか判然としませんが、後述するようにたぶん含まれないと思っています。
    • 手数料に消費税が含まれる場合、Google がその消費税額分を日本の当局に納めることになります。含まれていない場合はもちろん納めないです。

具体的に例を示します。消費税率を 5% に設定し、1,000円のアプリを1本売ったとすると、以下のようになります。

 売上         1,000
 税額            50
 ------------------
 請求額計     1,050
 支払手数料    -300
 ------------------
 受取額         750

さて、上述したように支払手数料 300 円に消費税が含まれるかどうか?が問題になります。課税事業者の場合、ここに消費税が含まれるかどうかによって仕訳も当局に納める消費税額も変わってくるからです。消費税が含まれていれば仮払消費税になるので仮受消費税と相殺できるわけですが、含まれていない場合は相殺できません。

仕訳としては以下のようになるでしょう。

消費税が含まれていないならば:

     売掛金           750    売上              1,000
     支払手数料     300    仮受消費税等      50

消費税が含まれているならば:

     売掛金           750    売上              1,000
     支払手数料     286    仮受消費税等      50
     仮払消費税等    14

私の推測ですが、この支払手数料は不課税取引であり、消費税は含まれていないと思います。理由は以下の3点です。

  • 手数料が「税抜」価格の 30% として計算されている。
  • 以下画像にある通り、Google Checkout の販売者取引明細を見ると、ユーザへの請求額には '消費税\xxを含む' の記載があるが、取引手数料については一切記載がない。(ちなみに 「?」のリンク先はここです。税の記載はありません。)

  • 支払い先が Google Inc. の場合、役務提供地が米国のため不課税取引となり消費税は課税されない。
    • Google Play の手数料支払は、いわゆる役務に対する支払である。この役務、つまり Google Play でのアプリ掲載、ダウンロードなどの役務は、米国 Google, Inc. が提供している。
    • この場合、消費税の課税判定は役務の提供場所で判定することになっている (国税庁No.6210国外取引 (1) ロ あたり)

手数料に消費税が含まれるかどうかは Google に対して再三問い合わせているのですが、まともな回答は一度も貰っていません。もうなんだか「Google Play」という名前が「放置 Play」に見えて仕方がありませんw

なお、Google の規約である「Android マーケット デベロッパー販売/配布契約書」には以下の記載があります。

3.2 デベロッパーが設定した対象製品の価格に基づいて、デベロッパーが受け取る金額が決まります。販売価格
に対して販売手数料(下記で定義)が課され、支払い処理業者、および認定携帯通信会社(該当する者が存在す
る場合)に分配されます。販売価格から販売手数料を差し引いた残額が、デベロッパーに送金されます。販売手
数料はこちらに記載されています。なお、販売手数料はGoogle が適宜改訂することができます。デベロッパーは、
対象製品が販売される課税区域ごとに、回収する支払い処理業者について、対象製品が課税対象かどうか、およ
び適用される税率を判断する責任を負います。デベロッパーは、適切な課税当局に納税する責任を負います。

一旦 Google Inc. に支払ったあと、支払い処理業者(Google Payment Japan や、キャリア課金の場合は各キャリア)に代金が分配されるということでしょうか?

とりあえずまとめ

まず、AppStore の場合。税率設定は特に必要ありません。JCT Tax Advice にユーザから預かる消費税と、iTunes KK に支払う消費税が記載されているので、それぞれ仮受消費税、仮払消費税で処理すればオーケー。

次に、Google Play の場合。Google Checkout で課税設定を行い、日本国内に対して 5% を設定します。
売上には 5% の消費税が含まれるので、これを仮受消費税として処理します。そして、Google に対する手数料支払は不課税取引として処理します(仮払消費税は0です)

なお、これは日本国内ですが、海外販売は Sales Tax とか VAT とか入ってくるのでさらにややこしくなります。AppStore は各国に対応した会社(欧州なら iTunes Sarlとか)が税の徴収と当局への納付をやってくれる地域が大半ですので楽です(やってくれない国もあるようですが)。Google Play は例によって何もしてくれないので、割りと死ねるんじゃないかと思います。

# そういえば、Apple は W-8BEN 提出とかがあるのに Google Play は一切ないんですが、源泉徴収とかしなくて大丈夫なんですか Google 先生。

、、、ということで自分の中では整理しました。とはいえ、税務にかんしてはかなり素人なので、詳しい方、間違いがあれば指摘してくれるとありがたいです。

3/28 補足: W-8BEN の件ですが、売主と買主の直接契約だから、Google は源泉徴収しないということみたいですね。

また、取引手数料に含まれる間接税については EU でも悲痛な声が(内容はやや古いですが)。EU でもやはり Google は手数料に VAT を含めていない模様。legal にやるなら、きちんと VAT を徴収して VAT Invoice を出さなければならないはずですが、Google は VAT Invoice を出しておらず、売主は VAT が入っていないものとして扱わないといけないようです。したがって、売主は税額控除ができず、皆さん困っているようですね。


'5/12 追記: Google から連絡があり、5/21 からようやく価格表示が税込価格になるそうです ⇒ Transition to tax-inclusive pricing on Google Play
これで総額表示義務に関しては問題解消しますね。

'2013/11/27追記: W-8BEN の件ですが、現在は Google Wallet Merchant Center 内で税務情報(Certificate of Foreign Status, W-8BEN相当)を登録するようになりました。

Android Market での消費税課税設定はどうするべきか

Android Market でのアプリ販売時の消費税設定がベンダによってばらばらなようで、どっちが正解なのか悩み中。どうも課税設定をしていないベンダのほうが多いんですよね。自分は設定するようにしてますけど。

消費税を課税設定している例 (TAITO)。こちらは消費税額が表示されています。

f:id:tmurakam:20120220104112j:image

課税設定してない例 (NTT DOCOMO)。こちらは消費税額が 0 円と表示されています。が、NTT DOCOMO が免税事業者なわけはないので、もちろん価格は税込表示なのでしょう。

f:id:tmurakam:20120220104524j:image

本来であれば、きちんと課税設定をしておくべきだと思います。でないと、領収書に消費税額出ないのでビジネスで使う場合は困るはずです。(税額 0 円とはっきり書いてあると、仮払消費税の確証としては非常に問題になりそうです)

ですが、消費税を課税しない場合だと Market での価格表示は税抜表示になってしまうので、総額表示になってないじゃないか。という問題もあります。Android Market 側が総額表示してくれるようにすれば何も問題ないんだけど。

どっちにしろ、かなり嫌な感じです。つーか、Google はこういう詰めが甘いところが多すぎです。

あと、自分は免税事業者だから関係ないと思っている人も多そうですが、免税事業者であってもお客さんの立場にたったら消費税額はちゃんと表示してあげなきゃダメですよ、と。

Google Checkout の個人情報の扱いについて、Google から回答が来ました

Google Checkout の個人情報の扱いに関して、1/25に Google に以下の問い合わせメールを送ってありました。

Googleウォレットチームご担当者殿

村上です。いつもお世話になっております。

以下の件すでに修正されているということですが、現在でも購入者の郵便番号、住所の一部、
本名、メールアドレスは以前表示されており、1月14日にお問い合わせさせていただいたときと比べ
何も改善されていないように見受けられます。(昨年12月初旬頃までは、メールアドレスは
@google.checkout.com のテンポラリアドレスとなっていましたので、その時と比べても悪化している
ように思われます)

これはもうこれ以上改善されない御積りなのでしょうか?先に依頼させていただきましたとおり、
販売者側としては無用な個人情報を提供された場合、販売数が5,000件を超えた時点で個人情報
取扱事業者となる義務が発生してしまうため、提供されないことを強く希望いたします。

以上、よろしくお願いいたします。

で、これに対する回答が今日届きました。以下全文。

お客様

お問い合わせありがとうございます。
お返事が遅くなりましたこと、大変申し訳ございません。

購入者のメールアドレスに関するご質問についてお答えします。Google は、購入者のメールアドレスを
お客様のようなデベロッパー (販売者) がご覧になることができるようにすることが適切であると判断し、
購入者がメールアドレスを匿名にする選択肢の提供を中止しております。例えば、アプリケーションに
関してカスタマーサポートを提供する場合や、取引に問題が発生した場合など、多くのデベロッパーが
購入者と連絡を取るためにこの情報を必要とされています。購入者のメールアドレスは、購入者とデベ
ロッパーの双方にご同意いただいている、 Google ウォレット プライバシー ポリシーに従って、デベ
ロッパーと共有されています。なお、この変更は、先般ご連絡致しました不具合に関係するものではあ
りません。

デベロッパーによる購入者の個人情報の取り扱いについては、適用のある規約・ポリシー類(以下のペ
ージにある規約およびポリシーが含まれます)をご参照ください。

1. Google を介した支払いの許可 - 利用規約 (Google ウォレット 販売者 利用規約)
https://checkout.google.com/termsOfService?type=Seller

2. Google Checkout 販売者 ポリシーおよびガイドライン
https://support.google.com/checkout/sell/bin/answer.py?hl=ja&answer=46174

3. Android マーケット デベロッパー販売/配布契約書
http://www.android.com/us/developer-distribution-agreement.html

4. Android マーケット デベロッパー プログラム ポリシー
http://www.android.com/us/developer-content-policy.html

5. Google ウォレット プライバシー ポリシー
https://checkout.google.com/files/privacy.html?hl=ja

今後とも Google ウォレット をよろしくお願い致します。

Google チーム

えーと、利用者のメールアドレスは販売者に通知しますと。このことは Google ウォレットプライバシーポリシーに記載されているということだそうです。たぶん「情報の共有」の節のことを指しているものと思いますが、私にはメールアドレスを販売者に渡すようにはちょっと読めなかったのですが、たぶん私の読解力が足りていないのに相違ありません。正しい解釈の仕方がわかる方は是非教えていただきたく。

まぁ、別にメールアドレスが必要だったら、それでもいいです。実際、サポートで必要になる場合もあるかもしれませんし(私はいらないが。ユーザから問い合わせくればわかるんだし)。でもメールアドレスを販売者に渡すよ、って利用者にわかりやすく示しておく必要はあると思うのですけどね。

それと、住所の一部が開示されていることに関しては一切この回答では言及されていませんが、こっちも同じ解釈なんでしょうか。

再度質問を送っても良いのですが、たぶん回答が返ってくるときには3月から発効する新しいプライバシーポリシーを見ろ、ということになりそうな気が激しくするのでやる気でないなー。

最近 Android Market の売上レポートに購入者の個人情報が思いっきり入るようになってしまった件

'13/7/6 追記: Google Play の売上情報に、購入者の個人情報が入らなくなりました

注: '12/1/13、Google側が誤りであったことを認めたとのことです。詳細は一番下の追記参照。

最近、Android Market の売上レポートに購入者の完全な名前・住所・電話番号・メールアドレスなどが表示されるようになってしまい、少々困っています。

Android Market でのアプリ売上は Google Checkout というサイトで確認できるようになっており、それぞれの売上ごとに詳細なレポートを閲覧できるようになっています。以下はその中の抜粋です(個人情報は全部塗りつぶしています)

配送先というところに、購入者の完全な住所・名前・携帯電話番号・メールアドレスが入ってしまっています。この配送先は前からレポートには出ていたのですが、以前は情報は部分的なものでした(住所は番地なし、電話番号なし、メールアドレスは @checkout.google.com のようなテンポラリなもの)

厳密には、完全な情報が入っているものとそうでないものが混在している(どういうルールなのかは知りません)のですが、ここ最近になってほとんどのレポートに完全な情報が入るようになってしまっています。

買う側からするとこのような情報が Google からアプリ販売者に行っているとはたぶん思っていないでしょう。販売する側からしてもそんな情報もらってしまったら個人情報としてきちんと管理しなければならず、はっきり言って迷惑です。

これが Google 側のプライバシーポリシーでどういうことになっているのかを少し確認してみました。これは Google Wallet プライバシーポリシー が該当します。この中に「情報の共有」という項があり、個人情報は基本的に第三者には渡さないが、例外条件が7個あると書いてあります。詳細は原文を見てもらうとして、だいたいこんな感じ。

  1. 取り引きの処理とアカウントの管理に必要な場合
  2. 不正行為、セキュリティ上の問題、技術的な問題を検知、防止、またはその他これらに対処するため
  3. ユーザーの同意がある場合
  4. 個人情報の処理を委託するため
  5. 法的な理由とか不正行為への対処とか財産の保全とかのため
  6. 販売者発行のクレジットカードを利用するケース
  7. 個人を特定できない集計情報

このうち、2〜7の条件はアプリ販売者に情報を渡す理由にはならなさそうです。1番目はやや微妙で注文のキャンセル処理で必要だと言えなくもないですが、条文を見るかぎり渡すのは電話番号だけで、しかも電話番号を渡した場合はユーザに通知されることとなっています。

ダメじゃねーか >Google

正直、購入者の完全な住所とかを販売者に渡してしまうのは、このプライバシーポリシーに激しく違反しているような気がします。識者の意見を聞きたいところ。

ちなみに、Apple の AppStore がどうなっているかですが、こちらは売れた本数しか報告してこないので、個人情報は一切販売者には渡されません。さすがですね。(逆に言えば個別に返金とかできないんですが)

1/5 8:07AM 補足: 上記は Android Market の有料アプリ販売の場合です。無料アプリの場合、Google checkout にはレポートは出ませんので個人情報は開発者側には渡されません。念のため。

2012/1/7 23:22追記: 上記の現象は'11/12/17以降のすべての注文に対して発生していましたが、現在確認したところ該当する注文について番地・電話番号は表示されなくなっています。何らかの対策がされたのかもしれません。ただ、それでも番地を含まない住所、名前、メールアドレスはまだ表示されています。

2012/1/13 0:32追記: ニュース出ましたね ⇒ グーグル 誤って個人情報表示。でもまだ番地なし住所、名前、メールアドレスは出てるんですが、これはこのままなんでしょうか?

2012/2/6 1:00追記: すでに1ヶ月経過しましたが、番地なし住所、名前、メールアドレスはまだ出ています。これはもうこのままのようですね。

2012/2/6 20:44追記: Google から回答メール来たので、次のエントリに詳細を書きました。

2013/7/6 追記: Google Play の売上情報に、購入者の個人情報が入らなくなりました

Android Market / Google Checkout から売上明細を自動ダウンロードするツールを作った

Android Market および Google Checkout から、Android アプリの売上明細とオーダー一覧をダウンロードするツールを作ってみました。github で公開しています。

http://github.com/tmurakam/android-checkout-scraper

とりあえず CSV でダウンロードするだけです。これを使って、売上のグラフ作るとか、誰かシステム作ってくれると嬉しい。

HTTPS を使ってるアプリを AppStore や Android Market で配信するときの輸出手続きについて(その4) - 商務省BISに暗号登録してみたよ!

'12/11/24: このブログの内容をもとに Amazon Kindle ストアで電子書籍を出版しました。

スマートフォンアプリ配信の輸出管理

スマートフォンアプリ配信の輸出管理

その3までで終わるつもりだったのですが、せっかくなので米国商務省BISに暗号登録までやってみました。

参考にしたのはこちらのブログです → Apple iTunes export restrictions on apps

やってみたら思いのほか簡単に ERN 取得できたので、やり方を書いてみようと思います。

登録するアプリについて

登録するアプリは、今開発中のこれです。

どこで暗号を使っているかというと、Twitter でツイートするところです。認証部分のところですね。このアプリは iOS5 専用で作っていて、Twitter のライブラリは iOS5 標準搭載のを使ってます。

みてわかる通り、このアプリはホームユースなので、その2に書いた通り Category 5, Part 2 には該当しません。また、該当したとしてもそもそも Twitter の認証でしか https を使ってないので、5D992-NLR で申告なしで輸出可能です。

にも関わらず、なぜ暗号登録をしたのか?理由は、単に暗号登録をしてみたかったからというだけです。我ながらマゾだと思いますw

追記: ちょっと勘違いしていたのですが、ERN は製品ごとではなくて、ベンダごとに1個とればよいようです。私は既に取得したので、今後は取る必要はないということですね。iOS に搭載されている標準暗号しか使わない場合は、ERNさえ最初にとっとけば製品毎に個別に申請はしなくていい、、、と思います。

SNAP-R への登録

まず最初にやるべきことは、SNAP-Rでのアカウント登録です。

これは SNAP-Rのサイトにいって、”Register online for a SNAP-R account”と書いてあるリンクをクリックして登録するだけです。個人で登録する場合、Company Name には個人名を入れて登録すればいいでしょう。

フォームに記入/送信が完了してしばらくすると、BISからメールが飛んできます。あとは記載されているリンクに従ってアカウント設定をすれば完了です。

EAR Part 742, Supplement 5 の資料を作成

ここが一番面倒なところです。BIS に提出する資料の作成です。

資料は、EAR Part 742 の末尾のほうにある "Supplement 5" に回答する形で作ります。PDF でしか書類を受け付けてくれないので、Word で作って PDF にするなりしてください。今回は Google docs で作りました。

Google docs 上にテンプレートを作成しましたので、参考にしてください → テンプレート

また、私が作成した資料をここにおいておきますので、煮るなり焼くなりどうぞ (住所とかは伏せてあります)

SNAP-R 上で暗号登録

いよいよ SNAP-R で暗号を登録します。

SNAP-R にログインしたら、画面左にある "Create Work Item" をクリックします。新規 Item の作成画面になりますので、"Encryption Registration" を選びます。(番号分類申請するときはこっちじゃなくて、Common Classification Request になるので注意)。Reference Number はアルファベット3文字 + 数字4文字で適当につけていいです。ここでは安直に "ERN0001" にしました。

登録画面になりますが、基本的なフォームは全部埋まっているはずです。画面一番下の「Documents attached to application」のところに、先ほど作成したドキュメントをアップロードします。"View and Manage Supporting Document" のリンクをクリックし、"Upload Supporting Document" をクリックすると、アップロード画面になります。

Document Type は "Encryption Registration Supp. No.5 to Part 742" を選びます。あとは適当で。

アップロードが終わったら、Item に戻り、「Preview Work Item to Submit」を押します。確認したらもう一度 Submit。

最後に署名画面が出ますので、名前や Title を入力します。名前は、Firstname 一文字 + "." + Lastname で書く必要があるので注意。

終わったら、画面左にある "View Messages" を見ると、メッセージが届いています。これを開くと ERN 番号が書いてあります。

f:id:tmurakam:20111011192013p:image

おめでとう、これで ERN 取得完了です!!!

あとは、この画面をキャプチャしておきましょう。iTunes connect でアプリを登録するときに、このキャプチャした資料を添付すれば OK です。

まとめ

これで無事 ERN を取得できました。

マスマーケット暗号 742.15(b) に該当するアプリで iOS に搭載されている標準暗号のみを使用するアプリの場合(つまり 742.15(b)(1) に該当する場合)、さしあたり iTunes connect へのアップロード時にこの ERN を提示すればその場でアプリを提出できます。

あとは、年1回の自己番号分類報告を作成してBISにメールで送付する必要があります。が、これは簡単な CSV ファイルを作って送るだけなので、そんなに大変じゃない、、、、と思います。

なお、非標準暗号を使っている場合 (742.15(b)(3)に該当する)はやや面倒で、BIS に番号分類申請をして CCATS を取得する必要があります。

Android Market でも、基本的には同じ手続きをしておけばよいかと思います。

10/12: まとめの内容を訂正しました (742.15(b)(4)が事実上使えないことがわかったため)