iOSアプリのリリースに関するやらかし



## はじめに

私は個人で iOS アプリを開発 & リリースしています。
その**リリースに関するやらかした話**を少しさせていただきます。👨‍💻


## AppStore 低評価とレビュー

私のアプリでは**評価で星 1~3 を頂く場合、バグの報告と共にレビューをして頂いたものが多い**です。
特にリリース初期は「バグ報告はレビューでいただく」という、やらかしっぷりでした。🤦‍♂️

そこで低評価を減らす対策として、 バグ報告・機能要望をアプリ内からいただくための実装を行いました。

使用したのが Slack の [Incoming Webhooks](https://api.slack.com/incoming-webhooks) というアプリです。
これを使用すれば **HTTPリクエストでJSONを送る実装のみ**で、ユーザーからの報告を Slack で受け取ることが可能になります。

Swift4, playground での実装は↓な感じです。`YOUR_INCOMING_WEBHOOK_URL` には固有のURLが入ります。

```
import Foundation
let SLACK_WEBHOOK_URL = URL(string: "YOUR_INCOMING_WEBHOOK_URL")!

let reportText = "バグだらけですよ!\nレポート機能があるから低評価はつけませんよ！"
let json: [String : Any] = [
    "text": "===== User Report =====\n>>>\(reportText)"
]
let jsonData = try! JSONSerialization.data(withJSONObject: json)
var request = URLRequest(url: SLACK_WEBHOOK_URL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData

URLSession.shared.dataTask(with: request) { data, response, error in
    guard error == nil else {
        print("\(error)")
        return
    }
}.resume()
```

届いた Slack メッセージ↓  
![結果](https://1.bp.blogspot.com/-FV0NXQYWHSM/XAIxEkkWbkI/AAAAAAAAAMQ/D-owBIIjcz0lOcQsWccgr7QvtHLSxlpNwCK4BGAYYCw/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-12-01%2B15.55.16.png)

Slack を使用するので通知も来ますし、無料で使えます。 
ただ、返信ができないためユーザーさん達には申しない気持ちがします。🙇‍♂️

## App内課金 関連

### 1. App内課金は審査が通ってから、反映までに 24 時間くらいかかる。

これを知らずに、アプリ内課金が実装済みで審査が通ったものをリリースしてしまいました。🤦‍♂️
これによって発生したやらかしは、次の通りです。

- AppStore のプロダクトページに、**「内課金あり」と表示されるが課金内容一覧に表示されていない**。

- アプリ内の課金プロダクトを取得する処理で、**「金額・名前・説明」など取得できていない**。
- 課金する処理をしても当然エラーが発生する。
- 焦って AppStore にメールしてしまった。（あとでググったら普通に出てきた。↓）  
- [【iOS】課金アイテムが承認済なのに承認されてない](https://qiita.com/helptan/items/1a7f90811d4fbfeb0dee)

なので対策として、審査が通ってから 24 時間くらい待ち、手動でリリースするのが良いでしょう。

ちなみに Apple からの返信は**「明日まで待って反映されなかったらまた連絡してね!」**みたいな感じでした。
ありがとうございました。🙇‍♂️

### 2. 自分の銀行口座が検索結果にない (Zengin Code)

アプリ内課金を実装するには、口座情報の登録が必要です。
通常は **Zengin Code（銀行コード+支店コード）**を元に銀行口座の検索・登録を行えます。
しかし、私が持っている口座の Zengin Code で検索しても、**表示されるのは別の支店の住所**でした。

そこで Apple にメールしたところ、
「住所は関係なく、zengin code が正しければ大丈夫だよ！」みたいな感じでした。 

結果、これは私のやらかしではなかったと分かりましたが、リリースして間もないため、
まだ振り込まれたかの確認はできていません。振り込まれますよーに💰

### 3. App 内課金のプロモーション

現在、AppStore ではプロダクトページや検索結果にも、課金情報を大きく表示することができます。
→ [AppStore App内課金のプロモーション](https://developer.apple.com/jp/app-store/promoting-in-app-purchases/)

これには、iOS 11.0 以上の機能になるのと、[SKPaymentTransactionObserver](https://developer.apple.com/documentation/storekit/skpaymenttransactionobserver/2877502-paymentqueue) の実装をしておく必要があります。
しかし、**SKPaymentTransactionObserver を実装していなくても App 内課金のプロモーションの使用ができてしまう**ので注意が必要です。

私は実装したと勘違いして一瞬やらかしました🤦‍♂️。
ちゃんとAppStoreにカッコよく表示されてしまいました笑
[SwiftyStoreKit](https://github.com/bizz84/SwiftyStoreKit#handle-purchases-started-on-the-app-store-ios-11) も対応しているようなので、ちゃんと実装してからにしましょう。

## おまけ AppStore インプレッション数

私のアプリはリリースしてからちょうど 1 年前くらい経ちます。
その**1 年間のインプレッション数（=アプリの検索・閲覧で見られた数）**が↓の図になります。  

![リリース後 1年間のインプレッション数](https://4.bp.blogspot.com/-L-R3_DOj0sM/XAIY5RoSiII/AAAAAAAAALU/RUqUJLmf19c_allShGeJIKjPKIHVLVTbgCK4BGAYYCw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-12-01%2B14.12.52.png)

これをみて一目瞭然なのは、**リリース時が桁違いなこと**です。AppStoreの新着のアプリに表示されるからかと思います（現在はAppStoreのデザインが大きく変わったので、今も言えるかはわかりませんが）。
つまり、**アプリをリリースするときは最初が肝心**です。

私の場合はプログラムのバグを放置してたり、プロダクトページなどを充実させておらず、完全にやらかしました。🤦‍♂️


## 最後に

1年近くiOSアプリ開発をしてプログラミングでやらかしたことも多々ありましたが、その後の運用でやらかす方が多かった気がしますので、運用メインの記事を書きました。何かのお役に立てれば幸いです。🎅