るいすときのこの物語

オタクエンジニアの雑記

勉強のために作ったWebサービスをアプリに載せたらAppleと激闘した話


この記事は「個人開発Advent Calendar 2018」の6日目の記事です。
昨日は asmz さんの「IT勉強会検索iOSアプリをリリースした話」でした。

普段はインフラエンジニアとして適当に仕事をしています。
今まで個人でいくつかリリースしてきたサービスの中で1つだけ紹介しつつ、個人開発の良さとか、Apple の厳しさを知ってもらえたらなと思います。

リリースしたサイト

uploader.xzy.pw

EasyUploader というサイトで巷で言う、「アップローダー」です。

特徴

1. 同時に複数ファイルのアップロードが可能
2. アップロードできるファイルの種類は豊富
3. 自分からURLを共有しない限り、誰にも見られることはない安全性
4. 各ファイルは直リンク可
5. 面倒なパスワード保護機能はなし(ログイン機能)
6. 有料ユーザーになれば1ファイル100MBまで、ファイルタイプの制限は無

構成

全部自宅サーバーで動かしているのでサーバー代はかかっておらず。
ストレージだけは毎日 S3 と同期しているのでかかっているのは S3 代と、ドメインですね。

収入

現状、主に Adsense のみ。
クリック単価の幅が大きく一概には言えないけど1日辺り「酒・タバコ」が買える程度。分かりにくいけど許してください。公表するとアカウント凍結されちゃうので;;

作った経緯

ここ最近、Golang の話題を Twitter でよく見ていて、これはいつかできてないとやばいやつだと思ったのがきっかけ。
Golang の公式チュートリアルも読まずに「Golang ファイル アップロード」とか調べて一ヶ月もかからずリリースできました。
結果的に良いコードではありませんが、基本的なことを理解することもできて、社会人になって業務でも使っているのでやってて良かったなあと思います。

本題

長い前置きも終わったので本題です。

本格的にユーザー数を増やそうと思ったら Web ページだけではなく、ネイティブアプリでも使ってもらいたい欲が芽生えてきました。
Swift は全く分からんし、Kotlin も全く分からないので、どっちかに手を付けていたらもう片方でまた時間取られるのは嫌だったので、Flutter に挑戦しました。

やることは単純で WebView で表示しているだけです。
ただ、Apple は厳しかった。

お前のアプリ中身なさすぎてクオリティ低すぎw

このリジェクトを調べていると、自ら申請を取り下げるぐらいには新参ネイティブエンジニアを苦しめるガイドラインなわけで、これを解決できた人はそうそういなさそう(調べる限り)

しかも僕の場合は、アップローダーサイトを WebView で表示しているだけなのでどうやって中身のあるように(見せる)したらいいかを考え、Flutter で AppBar + ナビゲーション機能を取り入れたところ、無事通過。

アプリ内に Android の文字を入れるな

そういうことらしいです。
TOP ページに、アプリもあるよ という表示をしていたわけですが、Appleガイドライン違反です。
Google には怒られなかったんだけどなぁ😌

iPad + IPv6 + WiFi でボタン押すと落ちるんだけど

上記環境で「ファイル選択」ボタンを押すとアプリが落ちる問題。

これ、iPadIPv6WiFi も関係なくて、ただただパーミッションの問題でした。
悲しい。

決済機能は Apple が提供するものを使え

当時は広告のみでフル機能を無料で開放していたので、アップロード画面後に投げ銭しませんか?を Buy me a coffee を使って実現していたのですが、これもガイドライン違反でした。

なので、Android 表記の件も含めてアプリ側にネイティブだと分かるように User Agent を変更して、サーバー側の HTML テンプレートで表示を切り替えました。

リリースされた

長い戦いを終えてやっとリリースすることができました。
Android に関して言えば1日でリリースできたんですけど。

普段はエンジニアとして、インフラしか見てませんが個人開発とか趣味で色々な領域を自分のペースで触れるのでメリットしか感じません。あわよくばお金にもなるし。あわよくば業務でも役立つし。

明日、マンションの共有部分の電気系統の点検でインターネットが数時間死にます。
一時的に EC2(APP+MySQL) + StorageGateway + S3 で行こうと思ふ。

こういうときも触ったことないサービスにも触る気が起きるし、皆さんにも個人開発おススメです。