1日1%成長するブログ

毎日成長するために仕事/プライベートで得た学びをアウトプットするブログです

IOS実機(開発中)のクラッシュを解析する手順

Firebaseでプッシュ通知を実装する時にIOSアプリ起動したらクラッシュすることがあったので、その解析手順。

クラッシュログの取得

  • Window - Devises - view Device Logs
  • 問題のクラッシュのログをコピーペースト

以下記事を参考にクラッシュログを解析する

ReactNativeでIOS/Android実機でプッシュ通知を試すハマり所まとめ(随時更新)

実機ビルドでハマる所(IOS)

  • SigningでTeamでログインしていない
  • error: Can’t find ‘node’ binary to build React Native bundle
    • nodeのパスを設定
  • Signing for XXX_Test
  • Unable to resolve module immtable
    • yarn add immutable
  • React/RCTBundleURLProvider.h file not found
    • node_modules削除して再yarn installやXcode再起動等で直ったりする

実機ビルドでハマる所(Android)

  • gradle 3.3アップデートを求められる
  • SDK Build Tools revision is too low
    • 青いリンクからupdate
  • JS bundle error
    • react-native bundle –platform android –dev false –entry-file index.android.js –bundle-output android/app/src/main/assets/index.android.bundle –assets-dest android/app/src/main/res/
  • index.android.js: Unexpected token )
  • gradleのsyncエラーはAndroid Studio再起動すると直ったりする

react-native linkは必要?

  • project.pbxprojの内容がプッシュされていれば不要

プッシュ通知設定(IOS)

  • Add the push notifications feature to your add id
    • generalのbundle identifierが被っているのが原因

プッシュ通知の基礎知識

  • IOS
    • アプリ起動時にプッシュ通知の許可をとる
  • Android
    • ストアのダウンロード時の同意ボタンの内容にpush通知が含まれているので、デフォルト許可

react-native-fcmを使うと実機起動時にcrashする

  • resourcesフォルダにGoogleService-info-plistを移す
  • これでもダメな場合
    • pod ‘Firebase/Messaging’, ‘3.17.0’にして再度pod installする
    • バージョン不整合で詰まる
    • ここはまだ調査中

Androidの実機のログを見る方法

人事と労務の違いって?

最近、労務関係の仕事に触れる機会が多いです。 よく聞きはしますがイマイチよくわかっていなかったので、意味をまとめました。

人事と労務

人事も労務も会社の「人」に関わる業務。 人事は「社員個人」を対象としており、労務は「会社全体」を対象としている。

類似職種として「総務」があるが、これは社内の備品管理や社内環境整備、 社内イベントの企画などを行う職種。

人事の仕事

  • 人員配置
  • 採用
  • 人材教育
  • 評価制度の策定

労務の仕事

  • 給与計算・勤怠管理
  • 社会保険手続き
  • 健康診断の対応
  • その他福利厚生に関する手続き

人事も労務もひっくるめてHR(Human Resource)Techだなぁとか思ってましたが、 ちゃんと調べると様々な領域に分かれていて、とても興味深い。

ReactNativeの実機ビルドでunable to load script from assets index.android.bundleになる時の対処

以下手順でOK

mkdir android/app/src/main/assets

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

再ビルド実行

[Android] Building release APK with react-native bundle · Issue #2743 · facebook/react-native https://github.com/facebook/react-native/issues/2743

リリース用のAPKの時にJSファイルをbundleしてくれないgradleの不具合? 今の所、自分でbundleコマンドを実行しないといけないみたい。

自分の場合はこれで動きました。

MacでAndroidの実機ビルドする時の最低限の手順

  • 実機のOSバージョンと同じAndroid SDKをインストール
  • Windowsの場合のみGoogle USB Driverが必要
  • 実機側のUSBデバッグ設定を有効にする
  • 接続した実機をクリックしてAndroid Studio側からビルドボタンをクリック

ReactNativeのbuild.gradleって何?

build.gradle

Gradle

Groovy

bunild.gradleの中身

  • 以下がReactNativeの初期状態のbuild.gradle
  • buildscriptブロック内のclasspathに外部のプラグインのjarファイルを指定することでプロジェクト内に追加することができる
  • classpath 'com.google.gms:google-services:3.0.0'Googleのサービス(Firebase等)をAndroidアプリ内で使うために必要なプラグイン
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.google.gms:google-services:3.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}
  • classpath追加後にapply plugin: xxと書くことで見つけた外部プラグインを実際に適用し使うことが出来る

Golangでネストした構造体を初期化する方法

次のようにネストした構造体が存在する場合に、 Golangでは初期化の方法が非常に面倒くさい。

type User struct {
    ID        int
    Name  string
    Account struct {
      Password string
      AccessToken string
    }
}
func main() {
    user := User{
      ID: 1,
      Name: "Masaru",
      Account: struct{
          Password string
          AccessToken string
      }{
          Password: "hogehoge",
        AccessToken: "fugafuga",
      },
    }
    fmt.Println(user)
}

こんな感じでネストした構造体の構造と値を別々で書かないと初期化出来ない。 最初結構嵌ったので、メモ。