Xcode12でビルドできるようにするまで
Xcode12でビルドできるようにするまで
- 実機のビルドだけであれば特に下記の内容対応する必要がないが、エミュレータを指定してビルドを行うとコケる。
使用したXcode
Xcode Version 12.0 (12A7209)
対応内容
- Podfileの修正
- Carthageビルド用のスクリプト追加
- Build Settingsの修正
Podfileの修正
- Podfileに下記を追加
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end end
Carthageビルド用のスクリプト追加
$ curl https://gist.githubusercontent.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5/raw/4ba422e5f3a5e7e37cdcb1e232058c5431fc59fc/carthage-xc12.sh -o wcarthage && chmod +x wcarthage $ ./wcarthage bootstrap --platform iOS --cache-builds --no-use-binaries
ref: https://gist.github.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5
Build Settingsの修正
- Xcode -> Target Project -> Build Setting -> Excluded Architectures > "arm64"
Xcode -> Pod Target -> Build Setting -> Excluded Architectures > "arm64"
Xcode -> Target Project -> Build Setting -> VALID_ARCHS > "x86_64"を追加
https://github.com/CocoaPods/CocoaPods/issues/10059#issuecomment-695876995
iOS メモ
画像の色を変える
UIImageRenderingMode.AlwaysTemplate
- UIImageRenderingModeAlwaysTemplate:テンプレート画像として描画し、色は指定したTintColorに従う
UIImageView の場合
let imageView = UIImageView(image: UIImage(named: "HeaderLogo")?.imageWithRenderingMode(.AlwaysTemplate)) imageView.tintColor = UIColor.greenColor()
UIButton の場合
let button = UIButton(frame: CGRectMake(0, 0, 100, 30)) let backImage = UIImage(named: "BackButton")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) button.setImage(backImage, forState: UIControlState.Normal) button.tintColor = UIColor.greenColor()
File URL not reachable
File URL not reachable
iOS13から発生。ギャラリーから選択したVideoをアップロードしようとしたらエラーが発生した。
解決方法
- 1.一時ファイルにコピーをする(ImagePickerControllerのdismissを呼ぶ前にやること、下記のエラーがが発生するため)
iOS 13 SDK consider photo app as an another app, so when we dismiss the image picker controller video url will be invalidate.
- 2.NSData型にしてからアップロード(ファイルサイズでかいと問題になるので注意)
参考
https://stackoverflow.com/questions/57798968/didfinishpickingmediawithinfo-returns-different-url-in-ios-13/58099385#58099385 https://stackoverflow.com/questions/58104572/cant-upload-video-to-firebase-storage-on-ios-13 https://stackoverflow.com/questions/58081267/nscocoaerrordomain-code-257-file-couldn-t-be-opened-because-you-don-t-have-permi
3ヶ月間セブ留学した後に感じるやっておけばよかったこと
まぁnothingだったんですけどね...
3ヶ月間セブ留学した後に感じるやっておけばよかったこと
仕事を休ん(辞めて)でセブで三ヶ月留学していました。
英語力ですが伸びたかと言われれば、結論から言えば伸びました。
だけど最初に自分が想像していた程かと言われれば、全然足りない。
また、セブでの生活は決して快適なものではないです。
例えばシャワーは弱いわ、学校の飯は美味くないわ、街は汚い、雨が降ったらネットワークが繋がらなく、朝から晩まで犬猫鶏が煩い、そこら中にハエがいる、ゴキブリだってそこら中に…etc
まぁ大体こんな感じですがみんな一週間もいれば慣れていました。
そんなセブ留学した後に感じたことをまとめてみました。 今後、フィリピン留学に希望をいだいているあなたのために。
留学前にやればよかったこと
文法(Grammer)
文法を英語で説明されますが、意外となんとかなるものです。 ですが、中学校で教わる文法くらいまでは予め学んでおくとよいです。単語(Vocabulary)
フィリピンに来てから勉強してもいいですが、ほぼ毎日知らない単語が出てくる日々なので、予め基本的な1000語は学んでおくといいです。授業で使う英語
もう一度言って?、どうやってそのスペリング書くの?、この単語の発音教えて?とか基本的なフレーズを使えるようになっておくと便利です。
留学中の過ごし方
授業
セブに留学する前はたくさん授業を入れたほうが自分の英語力が伸びると思っていました。ですが、これだと授業の復習、自習する時間が取れなくなってしまうので無理にたくさん授業取る必要はないと思います。
私の場合は、8コマ(グループ2コマ、マンツーマン6コマ)* 50分で授業を取っていました。
通っていった学校では自分で授業を選択できるのでマンツーマンはSpeaking 2コマ、Pronunciation 1コマ、Reading 1コマ、Listening 1コマ、Grammar 1コマにしていました。
文法の授業
文法の先生は気をつけたほうがいいです、これはフィリピン人英語は喋れますが文法に関してはちゃんと勉強している先生でないと、なぜその文法なのかを正しく説明してくれない場合があるので先に何が得意なのかを聞いて授業を決めるのがおすすめです。グループ授業
正直自分はあまり効果的ではないと感じることのほうが多かったです。 というのも、結局英語が不得意同士の人で集まって授業を受けているので、マンツーマンに比べると一回の授業で得る情報量が圧倒的に少ないです。
友達
学校の先生誘って旅行行くとかすると遊びながら英語の勉強出来ておすすめです。 先生の分の旅行費用は出す必要があるのでその分は余計にかかりますが、値段以上の物が得られると思います。 あと、学校の先生以外で現地の友達作るのはおすすめです。 これ一見難しいように思えますが、私の場合はCLE、JEEこの二つのイベントに参加して現地の友達を作りました。
食
寿司はほぼ無理です。。。諦めてください。 日本料理レストランもありますが値段がそこそこ(日本と同じ値段)します、こっちの物価を考えたらかなり高いです。 それとフィリピンの食はとても油っぽいので気をつけてください、一緒の時期にはいった子で一人、胃酸過多になっていました。
参考書
日本から持っていった参考書。
教材に関してはこれで足りなかったかと言われると、特に授業で教科書渡されるので特に問題ないと思います。
文法
- 一億人の英文法 ――すべての日本人に贈る「話すため」の英文法(東進ブックス)
頻繁に使いました。文法の授業は英語で説明されるためどうしてもわからないところはこの参考書を使って補っていました。
一億人の英文法 ――すべての日本人に贈る「話すため」の英文法(東進ブックス)
- 作者: 大西泰斗,ポール・マクベイ
- 出版社/メーカー: ナガセ
- 発売日: 2011/09/09
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 68回
- この商品を含むブログ (51件) を見る
単語帳
- 究極の英単語 SVL Vol.1 初級の3000語
- 作者: アルク英語出版編集部,阿川イチロヲ,小石裕子
- 出版社/メーカー: アルク
- 発売日: 2006/05/31
- メディア: 単行本
- 購入: 7人 クリック: 52回
- この商品を含むブログ (14件) を見る
辞書
- ウィスダム英和・和英
- 作者: 井上永幸,赤野一郎
- 出版社/メーカー: 三省堂
- 発売日: 2012/11/07
- メディア: 単行本
- 購入: 1人 クリック: 3回
- この商品を含むブログ (3件) を見る
日本でこの英和辞書(アプリ版)を購入してから行きました。
学校では先生にはこの英英辞書アプリをおすすめされたので、こちらも時々使っていました。
Dictionary - Merriam-Webster
https://play.google.com/store/apps/details?id=com.merriamwebster&hl=ja
もし戻って一冊だけ持っていくなら
- CD付 ネイティブなら子どものときに身につける 英会話なるほどフレーズ100 (スティーブ・ソレイシィの英会話シリーズ)
留学中にこの本の存在を知り日本に帰って買いたいくらいでした。もし英語に苦手意識があるけど留学しようとしているならまずこれを一冊覚えてから行くとかのほうがいいと思います。フレーズも100しかないので本自体も薄く、だけど日常会話で使うワンフレーズがのっているのでとても留学中とても使い勝手がよく先生とコミュニケーション取りやすくなると思います!
CD付 ネイティブなら子どものときに身につける 英会話なるほどフレーズ100 (スティーブ・ソレイシィの英会話シリーズ)
- 作者: スティーブソレイシィ,ロビンソレイシィ
- 出版社/メーカー: アルク
- 発売日: 2000/04/10
- メディア: 単行本
- 購入: 77人 クリック: 631回
- この商品を含むブログ (48件) を見る
【Retrofit2】baseUrlでhostnameより後のパスが削られる
地味にハマったので残しておきます。
Retrofit.BuilderのbaseUrlに"http://xxx.xxxx.xxxx/yyy/“と設定したのにもかかわらず、
APIを叩く時にhostより後ろのpath部分が落ちてしまい"http://xxx.xxx.xxx/hoge"となってしまう場合があります。
これは、HTTP APIのJava Interfaceの定義ミスでした。
問題の書き方はこれ
public interface GitHubService { @GET("/users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); }
これだとURLはhttp://xxx.xxxx.xxxx/users/{user}/repos
こうなる。
これならおk。
public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); }
これでURLがhttp://xxx.xxxx.xxxx/yyy/users/{user}/repos
こうなります。
@GET(/users/...)
か@GET(users/...)
の違いです。
前者の場合はhostNameからの絶対Pathとして解釈され、後者の場合は相対パスとして解釈されbaseUrlと結合出来ます。
適当なところからコピペするからこうなる…(戒めっ)
参考
【初心者歓迎】Kotlin開発Tech Talks 参加レポート
【初心者歓迎】Kotlin開発Tech Talks 参加レポート
概要
Google I/Oにて、ついにKotlinがAndroidの正式な開発言語として追加されました。今後より盛り上がっていくと考えられるAndroidでのKotlin利用に関する勉強会を開催します。
この勉強会で登壇するスピーカーが所属する5社は、Kotlinの導入度合いも会社の規模や成長フェーズもバラバラですが、いずれも「ヒトをつなぐ」自社サービスを展開しています。それぞれのサービスでのAndroid開発におけるKotlin利用について、その取り組みやノウハウなどを発表します。
【日時】7月12日(水)19:30~22:00
【場所】スタートアップベースキャンプ オープンスペース
【住所】東京都渋谷区円山町28-1 渋谷道玄坂スカイビル8F
【費用】¥1,000 ※飲み物と軽食をご用意します
【URL】https://connpass.com/event/59898/
■ほぼ毎週リリースアプリのKotlin書き換えの道のり
- 株式会社葵 近藤 和宏
Kotlin事情
- アオイゼミ(iOS, Android, Web版)
- 去年夏頃よりリニューアル計画
- 10月には言語や内部仕様、リニューアル内容の決定
- Kotlinの熱量と書きやすさ採用などを鑑み採用
- 12月から開発開始
12月末一部KotlinとJavaが併存している状態でリリース
ほぼ毎週リリース
- 1月〜4月までの間、Kotlin Onlyで書き直しているブランチと試作用の2つのブランチを使って開発していた
- 約20万行以上のコードを書き直し
メリット編
- null safe
- 公式サポート
- 採用にインパクトある
色々あったよ編
- Android 65K
- Null safeなKotlinでもnullpointerexceptionは発生する “?"でマーク、コード側で防御、NPEが入り込まないように設計
- 動画が再生されない事件
一部ユーザーが動画がされない報告が続出
CDNがHTTP2.0に対応TLS1.1.以下を切り捨てていた
急なトラブル対応にはまだJavaのコードを読む必要がある
■開発 4 年目のアプリへの Kotlin 導入
ChatWork株式会社 宮下 竜大郎(チームリーダー)
国産のビジネスチャットサービス
最初はTitanium製
Android版(2014年12月からネイティブ)
なぜKotlinを導入するのか?
急ぐ必要はあるのか?
-> 急がなければならない理由はない
あくまでも公式サポート言語が増えただけ
- それでもKotlinを導入する理由
- エンジニア的な楽しさ
エンドユーザーのメリットにもなる言語機能
- ボイラーテンプレートを少なく出来る
- Lambda式
java8のラムダ式よりもカンタンに書ける(スッキリ書ける)
- Lambda式
- ボイラーテンプレートを少なく出来る
脳内の処理イメージをコードに反映しやすい
スコープ関数
拡張関数
if, try, when
チームにどう効いていくるか
- ユースケースを表したコードになりやすい
- 無駄が無いのでコードレビューがやりやすい、確認と指摘の漏れが少なくなる
気をつけること
- 7200メソッドほど増える
- 65Kメソッド制限にぶつかる可能性が高まる
- kaptが生成するコードに問題があることもある(たまにドハマリ注意)
どう導入を進めていくか
- すべてのコードをKotlinにするのは先が遠い
- 部分的にKotlin化していくのがよい、Chatworksでは下記の手順で行った
- はじめに、シンプルなDialogFragmentをKotlin化して、誰でもJavaのコードがイメージできるように
- 次に既存のコードを一つKotlin化
- 新規機能コードをKotlinで追加
課題
- 何をどこまでKotlinで書くかは定まっていない
- 非同期処理でasync/awaitを使っていくとか
- 全員が足並みを揃えられるかどうか
- チームにとって、ひいてはユーザーの価値になるか
- Kotlinのコードを負債にしてはいけない
■1年ぶりにやりなおすKotlinアプリ開発
株式会社m-gram 北原 和也
エムグラム正確診断
もうすぐリリース予定
AndroidはKotlinで開発
思ったこと
Annotationプロセッサーを使用しているライブラリをするっと使えるようになっている
Kotlin記事も増えている(一年で倍以上増えている)
一年前のlintの結果がイマイチだった
クラスによってはwarning出たり出なかったりしてまだ使えない印象
Kotlinと一緒に使ったライブ
■テストから始めるKotlin導入
株式会社エウレカ 二川 隆浩
futabooo
十分に発達したバグはどれも、機能と見分けがつかない
-> 主要な機能でバグが発生
- テストが書いてあれば防げた
-> しかし、テストが書ける状態ではなかった
テストが書きやす構成にする
レイヤーをはっきり分ける
詳細は、Activityを改善した話のスライド見て!
■KotlinとJavaの相互運用
コネヒト株式会社 富田 健二
@tommykw
ママリのkotlin導入
導入方針
- 無理にKotlin化はしない
- リファクタリングや新機能を実装する際にKotlin化をする
Kotlin導入結果
10月からスタートして54%導入完了
2割くらいコード行数が減った
簡潔に記述できるようになった
KotlinとJavaの相互運用
難しい点
PlatformType
T!を表す
IDEAでPlatformTypeだと警告を表示してくれる場合がある
java側で@nullable, @nonnullを定義するMappedType
javaとkotlinの型テーブルデフォルトfinal class
kotlinのクラスはデフォルトfinal
javaとは異なり、継承する場合にopenをつける検査例外について
Kotlin側で@Throwを定義する
IDEA側で警告を定義するドキュメント
コメントの書式が統一出来る
コメントがまとまっていてコードが読みやすい
コメントを書くことによって読みやすいコードを意識できる- KDoc
マークダウン記法 - dokka(htmlとして吐き出してくれる)
共存したプロジェクトにも対応
- KDoc
メリット
生産性の高さ
コレクションの操作が直感的で楽
学習コストもそれほど高くない
IDEAの補完が強力
デメリット
既存である場合は相互関係の辛さがある
ごちそうさまでした🍕
TextViewのAutolink問題
TextViewのAutolink問題
lolipop以上でTextViewでandroid:autoLink="web"
と設定すると、余計な文字列までリンクになってしまう場合があります。
例えば、こんな文字列を入れた場合には"Link http://google.com but dont link abra.kadabra"、
http://google.com
だけをリンクとしてほしいに、dkra.kadara
もリンクになってしまいます。
というわけで回避方法です。
参考
https://stackoverflow.com/questions/30528825/android-autolink-is-too-aggressive