React Nativeでrun-iosした時にPrint: Entry, ":CFBundleIdentifier", Does Not Existになってしまう問題
react-native run-iosを実行した時に下記のようなメッセージが表示されてしまい、アプリが起動しなかった。
(XCodeでRunするとちゃんとアプリが起動する)
The following commands produced analyzer issues: Analyze Modules/RCTRedBox.m (1 command with analyzer issues) Installing build/Build/Products/Debug-iphonesimulator/アプリ名.app An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2): Failed to install the requested application An application bundle was not found at the provided path. Provide a valid path to the desired application bundle. Print: Entry, ":CFBundleIdentifier", Does Not Exist Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/アプリ名.app/Info.plist Print: Entry, ":CFBundleIdentifier", Does Not Exist
ググると下記のQiitaページがヒットするが、ちょっと今回の事象とは違う。
(RCTSRWebSocketのエラーは出てない)
もう少し調べてみると、react-nativeのissueでそれらしきものを発見。 下記のコメントの対応で解決した。
build/Build/Productsにするだけでなく、"Relative to Workspace"を選択するのがポイントみたい。
react-navigation
react-nativeのnavigation系のライブラリを探しているときに見つけた。
今年の1月末あたりに公開されたようで、ブログによるとEx-NavigationおよびReact NativeのNavigatorやNavigationExperimentalの置き換えを狙っているらしい。
まだ1.0.0-beta3なのでこれからだろうが、NavBarやTabBarの中でModal表示する場合にどうするかが分からなかった。(サンプルはホームからModal表示でNavBarやTabBar遷移するものだった)
StackNavigatorにmode: ‘modal'を渡せばModalになるが、ネストの中の定義は効かずトップに定義すると全てモーダルになってしまう。。
NavBarやTabBarの中でModalは普通にアプリを作っていると利用があると思うが、どうするのだろう。
Modalは別でReact NativeのModalコンポーネントを使う??
react-native-router-fluxでサンプル
配色とか超雑だけど、react-native-router-fluxのサンプル実装をした。
直近で必要そうなNavBar,TabBar,Modalの各遷移を公式のExampleを参考にした感じ。
ModalはSegueでいうpresent modallyな動きをして欲しかったが、合わせるには工夫が必要?みたい。
他にモーダル用のライブラリとかあるのかな?
追記 (2017/02/14 13:01)
他にreact-native-navigationというものがある。
example動かした感じでは、求めているものの動きはこちら。
でも、react-native 0.37.0までしかサポートしてないのか。。
追記 (2017/02/15 22:55)
ModalのScene定義の位置をtabsの中にしていたので、present modallyな遷移アニメーションになってなかったらしい。
修正したらちゃんと動いていたので、これで良さそう。(ソースも修正しました。)
react-nativeでiOSアプリを作ってみた時のエラーあれやこれ
初めてreact-nativeでiOSアプリを作ってみた。
メディアプレイヤーアプリのようなもの。
(個人利用目的でアプリストアでは公開してない)
利用したライブラリ
- react-native-fs
- react-native-vector-icons
- react-native-video
- react-native-video-player
遭遇したエラー
react-native-videoでビルドエラー
普通にnpm installでreact-native-videoをした場合にビルド時エラーが出たので、下記のIssueにあるようにmasterを使うようにしたら解決した。
require(‘./images/’ + no + ‘.png’)のようなことはできない
公式にある通りrequire内で変数は使えない。
// GOOD <Image source={require('./my-icon.png')} /> // BAD var icon = this.props.active ? 'my-icon-active' : 'my-icon-inactive'; <Image source={require('./' + icon + '.png')} /> // GOOD var icon = this.props.active ? require('./my-icon-active.png') : require('./my-icon-inactive.png'); <Image source={icon} />
しかし、sourceにはrequireの他に{uri: ‘パス’}を引数に渡せ、こちらだと変数を使える。
今回はiTunesのファイル共有を利用することにしたので、react-native-fsを利用してファイルの絶対パスを指定している。
※react-native-fsを利用するとRNFS.DocumentDirectoryPathでアプリのDocumentsフォルダの絶対パスが取得できる
もしソースコード内のファイルの場合に{uri: ‘file://./images/test.png’}のような相対パスでの指定はできるのだろうか?別の機会で検証してみたい。
また、iOSアプリのディレクトリ構成は下記のQiitaが分かりやすかった。
実機でテストするときのエラー対応
まずはそのまま実機にビルドしようとするとエラーが出るので、下記を参考にしてTeamやTarget OSを指定した。
yoichirowatanabe.hatenablog.com
これで実機にはビルドできるがまだDebugモード?なので、起動が遅い。
なので、Productionとして実機で動かすときは公式にあるように、Releaseにする。(DefaultはDebugのはず)
しかし、これをしてビルドしようとしても下記のエラーが出てしまった。。。
ld: symbol(s) not found for architecture arm64 react-native
調べてみると下記のissueと同じようだった。
なので、ここにいくつか対応方法が書いてあったやつのDead code strippingをNoにするとビルドできた。
※アプリ名TestsにlibReact.aを追加しろとあったが、それはすでにあったのでやらなかった
2017年の抱負というか意気込みというか
これまで目標や抱負などというものをあまり公言してこなかったので、動機付けというか自分を鼓舞するために書いておこうと思う。
ざっくりと今年の抱負は下記のような感じ。
- アウトプット
- 個人開発
- 自分を知る
- 英語
- プログラミング言語
アウトプット
主にはブログ。去年の下書き状態のまま記事がたくさんあるので、今年はあまり溜めずに。
まずは月2くらいの更新頻度を目指す。
もう1つは勉強会などで発表する機会を増やすこと。
人前での発表を今まで超苦手にしてきたので、まずは社内勉強会とかからやっていく。
個人開発
自分は0→1でものを作るのがとても楽しくワクワクするというのと、あまり仕事でサービスの運用を経験できないので自分でサービスを作って運用もしてみたい。 あと自分のポートフォリオのようなものとして。
とりあえず、今作ってるアプリの超最低限の機能が年末あたりでできたので今、環境やデプロイ自動化を準備しているところ。
既存サービスやデザインをどうこう考え出すと途中で挫折するので、とりあえず作って公開をする。
デザインとか最悪お金で解決すればいいし。
と言いつつも、お小遣いパパエンジニアなので資金は全然潤沢ではないので、費用を抑えた運用やサーバ代くらいは賄えるマネタイズは考えておきたい。
自分を知る
世の30歳になるエンジニアは、これからの自分の生存戦略に迷うようで自分も例外ではなかった。
現在SI系で働いているが、Web系にもすごく憧れがありチャレンジしてみたい思いもある。
しかし、転職準備するときに自分の強みやこれからのキャリアパスなどが具体的に出てこなかったので、転職するしないはともかくとしてこれからの自分の方向性をしっかり考えておかないとなと思った。
月1でこのあたりは考えて、ブログにもまとめておきたい。
英語
これはここ2,3年ほど思っているがなかなかものにならない、というか続かないので今年はより具体的に。
目的
まず、なんで英語ができるようになりたいかというと、エンジニアによくある海外のIT系情報を原文のまま読めるようになりたい!と言ったもの。
自分の欲しい情報とかはある程度英語サイトも見るようにしているが、なんとなくの雰囲気やgoogle翻訳に頼っているので。
やること
- Doulingo
- 通勤時の隙間時間に基礎系を
- Rails CastなどのIT系の英語動画を見る
- 技術系ならとっつきやすいと思っている
- 以前ニュースやスポーツ系のpodcastとか手を出したが全然続かなかった・・・
- 気になった言い回しやわからない単語をメモっておく
- 技術系ならとっつきやすいと思っている
- TOEIC受ける
- 今まで英検すら受けたことないので今年は受けて見る
- 高校英語は落ちこぼれの部類だったので、とりあえず500点を目指す
- おそらく、今すぐ受けても300点いくかどうかのレベルかな?
- 5月あたりに1度受ける
しばらくはまとまった時間はサービス開発に充てたいので、通勤時間や昼休みなどの隙間時間を使ってやる。
プログラミング言語
去年はSwiftを少しやっていた。(先の個人開発でWebViewなアプリを作っているのもあって)
今年は下記の言語に興味あるのでどれか手を出したい。
- Elixir
- Rust
- Golang
【メモ】Railsでassetsパスやautoload_pathsの確認方法
毎回調べて同じサイトを見ている気がしたので、メモとしてまとめておく。
rails c # assetsパスの確認 > Rails.application.config.assets.paths # autoload_pathsの確認 > ActiveSupport::Dependencies.autoload_paths
to_s(:delimited)
数値を3桁区切りにするのをnumber_with_delimiter以外にto_s(:delimited)でできるの初めて知った。良い。