万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Flutterでの環境でのアプリ名切り替え

    例のビルドコマンド引数 --dart-define=FLAVOR=dev での切り替え。

    iOS

    ios/Runner/Info.plist ファイルに以下を書く。

    <string>$(APP_DISPLAY_NAME)</string>

    ios/Flutter/dev.xcconfig ios/Flutter/prod.xcconfig ios/Flutter/stg.xcconfig の3ファイル

    APP_DISPLAY_NAME = アプリ名 環境名 を記載する。

    Android

    ここが参考になる。

    Flutter Androidの開発環境 切替設定 #環境設定 - Qiita

            // アプリケーション名の設定
            resValue "string", "app_name", "自身のアプリ名" +
                (dartEnvironmentVariables.FLAVOR == 'prod' ? '' : ".${dartEnvironmentVariables.FLAVOR}")

    スペースにしたい時は ".${dartEnvironmentVariables.FLAVOR}". にする。

    Intelli Jでのパスを確認する。

    Intelli Jでのパスを確認する。

    gradle.properties にはGradleバージョン

    distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip

    gradle/wrapper/gradle-wrapper.properties には

    /usr/libexec/java_home -v 11 の結果を

    org.gradle.java.home=/Users/shinriyo/Library/Java/JavaVirtualMachines/corretto-11.0.24/Contents/Home

    Dartのプラグイン公開の

    flutter packages pub publish でのエラー。

    以下のエラー

    Then click "Allow access".
    
    Waiting for your authorization...
    Authorization received, processing...
    Successfully authorized.
    Uploading...
    Failed to scan tar archive. (Entry "example/ios/Runner.xcodeproj/project.pbxproj" has no default mode bits (644).)
    pub finished with exit code 1

    example/ios に行こう。

    $ ls -l
    total 16
    drwxr-xr-x  8 shinriyo  staff   256 Aug  9 07:50 Flutter
    -rw-r--r--@ 1 shinriyo  staff  1347 Aug  9 08:07 Podfile
    -rw-r--r--@ 1 shinriyo  staff   771 Aug  9 08:25 Podfile.lock
    drwxr-xr-x@ 7 shinriyo  staff   224 Aug  9 08:25 Pods
    drwxr-xr-x  9 shinriyo  staff   288 Aug  9 07:45 Runner
    drwxr-xr-x@ 5 shinriyo  staff   160 Aug  9 08:25 Runner.xcodeproj
    drwxr-xr-x@ 5 shinriyo  staff   160 Aug  9 07:52 Runner.xcworkspace
    drwxr-xr-x  3 shinriyo  staff    96 Aug  9 07:40 RunnerTests

    以下実行

    chmod 777 Runner.xcodeproj 
    $ ls -l                     
    total 16
    drwxr-xr-x  8 shinriyo  staff   256 Aug  9 07:50 Flutter
    -rw-r--r--@ 1 shinriyo  staff  1347 Aug  9 08:07 Podfile
    -rw-r--r--@ 1 shinriyo  staff   771 Aug  9 08:25 Podfile.lock
    drwxr-xr-x@ 7 shinriyo  staff   224 Aug  9 08:25 Pods
    drwxr-xr-x  9 shinriyo  staff   288 Aug  9 07:45 Runner
    drw-r--r--@ 5 shinriyo  staff   160 Aug  9 08:25 Runner.xcodeproj
    drwxr-xr-x@ 5 shinriyo  staff   160 Aug  9 07:52 Runner.xcworkspace
    drwxr-xr-x  3 shinriyo  staff    96 Aug  9 07:40 RunnerTests

    しかし重要なのはさらに中の project.pbxproj だった。

    sudo chmod 644 Runner.xcodeproj/project.pbxproj

    PrefsManager Dart

    SharedPreferencesの型ごとにやるの面倒くさいからこれで型を意識しなくていいような?

    prefs_manager.dart

    class PrefsManager {
      final SharedPreferences _prefs;
    
      PrefsManager(this._prefs);
    
      Future<void> save<T>(String key, T value) async {
        if (value is String) {
          await _prefs.setString(key, value);
        } else if (value is int) {
          await _prefs.setInt(key, value);
        } else if (value is bool) {
          await _prefs.setBool(key, value);
        } else if (value is double) {
          await _prefs.setDouble(key, value);
        } else {
          throw ArgumentError('Unsupported type');
        }
      }
    
      T? load<T>(String key) {
        if (T == String) {
          return _prefs.getString(key) as T?;
        } else if (T == int) {
          return _prefs.getInt(key) as T?;
        } else if (T == bool) {
          return _prefs.getBool(key) as T?;
        } else if (T == double) {
          return _prefs.getDouble(key) as T?;
        } else {
          throw ArgumentError('Unsupported type');
        }
      }
    }