見出し画像

WorkoutPal Liteを作りました #個人開発

本日早朝、無事に審査を通過しました。


「僕、個人でアプリ作ってるんですよ笑」ってドヤりたい

500円玉貯金を頑張って購入したMacBook Proを、動画編集以外にも使いたい。
仮にも「エンジニア」を名乗るからには、開発マシンとしてこの子を役立ててやりたい。

あとは個人開発ブームの波。
俺も「個人でアプリ開発してるんですよ」って言えるようになりたい。
なんかカッコイイから。

どういうアプリを作ったものか…

ここで一番悩んだ。

理想

「こういうことを解決したい」に対して
「こういうアプリ・サービスがあればイイ!!」ってなって
「ならこういう技術が使えるナァ」って順路をたどる。

現実

「こういう技術を使えたらカッコいいナァ」から始まって
「つまりこういうアプリ・サービスが作れるってことだナァ」ってなって「じゃあどんなのを作ろうかナァ」って流れ着いている。
全く真逆だし、しかも下心ドリブン。

「なんとなく」個人開発を始めたい人がぶち当たる心のモヤモヤが、
見事に言語化されていると思う。

なので、

  • ちいちゃいツールアプリにする
    オンラインでなんやかんやする機能?いらん!いらん! (柳一)
    類似アプリが既にある?知らん!

  • 機能は2~3個あればいい
    他の人に「え?これだけ?」って言われても一向に構わないという心構えで。

  • 最悪闇に葬れば良い
    究極これでいい。

世の中で儲かっているアプリは大抵組織だった開発がされているし、
念入りにアイデアを要件に、要件を設計に、設計を実装に落とし込んでいるし、
何度も何度も改修とリリースを繰り返して完成度が上がっているし、
そもそもその根っこにはサービス発案者の強い意思が乗っかっている。

個人のペーペーが、いきなり同じステージに立とうとするのがまず間違っている。

「まずはミジンコなモノでいいから1個作ろう。」って、自分に1億回言い聞かせた。

…って感じの自己問答を経て、大体以下の思考の流れでアプリのテーマを決めた。

  1. 最近自宅筋トレに勤しんでいるので、やっぱりテーマは筋トレだな!

  2. 事前設定されたトレーニング種目が連続で自動再生されるのは便利だな!

  3. そういえばHIITトレーニングも数十秒単位の種目を繰り返すやり方だけど、秒数とセット数を任意設定して取り組めるタイマーがあったら便利だな!

  4. ヨシ、じゃあそのタイマーのアプリを作ろう!

そうです。タイマー機能です。HIITメニューにも対応できます。
使い方紹介動画なんて作るまでもない。

iOSか?Androidか?

MacBook Proを持っていて、しかもiPhoneユーザー。
→じゃあiOSにしよう

Flutterを使えば将来的にはAndroidの開発もできるな?
→じゃあSwiftじゃなくてFlutter + Dartにしよう

(ココ大事)どうせなら収益がほしい

昨今は単品購入よりもサブスク課金型のアプリやサービスが主流。
でも今回作るタイマーだけのアプリでサブスク利用なんて流石に。

いきなり金儲けのことを重視して考えるべきではないな。
でもただ単に完全無料ってのもなんだか悔しい気がする。
→じゃあちっちゃいバナー広告だけ出すか!

ということでGoogle AdMobを採用。
「今のうちに実装の仕方をお勉強しておこう」、くらいのハードルの下げ方。

だれか参考になる開発者はいないかな

あたか氏
個人開発だけで生計を立てているお手本のような人。
この人のブログはチェックしている。

こういう人ですら数多の失敗を乗り越えて今があるということなので、自分も気長に。

Download on the App Store

単機能のLite版。バナー広告は出るけど無料です。

今後の個人開発目標

課金による機能開放の仕組みは違反と何処かで聞いたので、
今回は単機能のLite版をリリースした。

「もっと機能や使いやすさを充実させた完全版を作る」
まさに今後の目標課題です。

これから個人開発やってみたい人が押さえておくべきリンク集とtips

iOSに偏っているけど、実際にアプリを開発した後にApp Storeにリリースするまでに役に立ったリンクを載せておく。
特に審査準備のあたりは手続きや提出に必要な情報が沢山ある。


申請までの大まかな方法。
「この手順通りに進めていけば良いんだな」、という安心感をまずは確保しよう。
申請ページとこの記事を行ったり来たりしながら手続きした。


詳細な発生原因は不明なままなんだけど、このqiita記事と全く同じエラーが出て、全く同じ対処法で解決できた。


提出用スクリーンショット関連の記事。
最低限キャプチャが必要な画面サイズと、その画面サイズに対応した機種名の一覧が見られる。
6.5インチと6.7インチはどっちか片方が必須だよ、5.5インチは必須で、該当機種はiPhone 8 Plusだよ、的な。

実際の提出画面上には全画面サイズ分のアップロード領域があるので、「結局どこにアップロードしたらいいの?」と混乱しやすい。

あと付け加えるなら、提出したスクリーンショットを撮る時は広告を非表示にしないとリジェクトされるので注意。


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // ← HERE!!!!
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

Debug Runする時に、画面右上の「DEBUG」ラベルを消す魔法設定。
キャプチャを撮る際に一旦ラベル消したい時はこの設定を入れてからDebug Runすればよろしい。
サンプルコードはFlutterのチュートリアルより抜粋。


// iPhone14 Plus + iOS 16.0 の場合
// not working
$ xcrun simctl status_bar "iPhone 14 Plus" override --time '9:41'

// working
$ xcrun simctl status_bar XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX override --time '9:41'

提出用スクリーンショットを撮るとき、シミュレータ上の時刻をいじるためのコマンド。
App Store上にリリースされた際に、スクショの時刻が"9:41"で統一されているとカッコいい。
(とかいいつつ自分のアプリページ見たら時間が統一できていなかった)

しかしiOS17のシミュレータだとこのコマンドが効かない。
AppleのDeveloper Forumにも関連スレッドがあった。
今回提出したスクリーンショットも、やむなくiOS16のシミュレータ上で撮影した。

いやいやしかし、これで俺もiOSエンジニアの仲間入りか…
世の本職の方々からは「ナメんな」って言われそうだな…


この記事が気に入ったらサポートをしてみませんか?