User-Defined valueをappDelegate.mで参照する

モバイルアプリネイティブ開発の知識が全く無い状態で、ReactNativeのExpo使用アプリをEjectしたら、いろいろ困ったことになったのでメモする。

User-Defined valueをappDelegate.mで参照する

1. BuildSetting で User-Defined の値を設定する

例えばこのように、自分の環境では各Configurationの名前をJavaScriptファイルに渡すために User-Defined で設定している。

今回は、この値をappDelegate.mで参照したい。

f:id:ksmzn:20200716132400p:plain

2. Info.plistに適当なKeyと、1のUser-Defined valueを登録する

Keyは何でも良い。

f:id:ksmzn:20200716132645p:plain

3. appDelegate.mでobjectForInfoDictionaryKey を使用して参照する。

NSString *valueName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"<YourKeyName>"]; とすれば参照できる。

↓今回は以下のようにすればOK

NSString *envForJs = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Env"];

以上です

CircleCI でkeyに環境変数を使う

モチベ

cacheのkeyに環境変数を使うことによって、circleci.ymlを変更することなく、UI側で操作するだけでキャッシュをクリアできる。

やりかたのメモ

yarnの場合の例

cache-dependencies-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}-{{ checksum "package.json" }}-{{ arch }}

{{ .Environment.CACHE_VERSION }} をkey名の先頭に置きたい場合は、クォーテーションで囲む必要がありそう。今回は面倒なので間に挟んだ。

参考

プロジェクトキャッシュのクリア – CircleCI Japanese Support Center

Using Keys and Templates

aws.s3パッケージでRからAWS S3にCSV、GZIPを保存する

注: この記事は2017年08月23日に最終更新したQiita投稿記事を、こちらのブログに移植したものです。


RからS3に直接データを書き込みたいときがあります。 そんなときは aws.s3パッケージが大変便利でありまして、使い方は 「株式会社ホクソエムのブログ」の下記記事が非常に詳しいです。

awe.s3パッケージでRからのAWS S3とのファイルやりとりを行う

上記記事ではCSVをS3にアップするために一度保存していますが、これは aws.s3::s3write_using関数を使うことで一発でS3にCSVでアップできます。

library(aws.s3)
Sys.setenv(~) # 上記記事を参考にセットアップ
s3write_using(iris, write.csv, object = "iris.csv", bucket = "your-bucket-name")

また、RedShiftを使うときなどは、GZIP形式で保存したいことがあります。 そんなときは下記のように関数を作ればOKです。

library(aws.s3)
Sys.setenv(~)
fun <- function(x, tmp, ...){
    gz.handler <- gzfile(tmp)
    write.csv(x, gz.handler)
}
s3write_using(iris, fun, object = "iris.csv.gz", bucket = "your-bucket-name")

簡単なので必要ないかもしれませんが軽く解説すると、パッケージのソースを見ると、 aws.s3::s3write_using関数内部では、いったんtempfileに保存して、それをaws.s3::put_objectでS3にアップロードしているようです。

なので、aws.s3::s3write_using関数に引数で渡す関数のなかで、上のようにgzfile関数をカマしてやればOKです。

以上です。