- 0.1. iOSのARKitを使いこなしたい
- 0.2. iOSでちょっと多めのツールアイテムに対応可能なツール選択 UI Component
- 0.3. ARKitのはじめかた その2「オブジェクトを配置する(ARKit1版)」
- 0.4. iOS13のUISearchBarにつまずいた
- 0.5. Xcode11.0の画面収録につまずいた
- 0.6. iOS13のPopoverにつまずいた
- 0.7. Xcode11.2につまずいた
- 0.8. iOS13のModalにつまずいた
- 0.9. iOS13のDark Modeにつまずいた
- 0.10. iPadOSのUAにつまずいた
- 0.11. Fastlane pemでpush通知の証明書の更新
- 0.12. 任意のバージョンのCocoaPodsをアンインストール/インストールする
- 0.13. TestFlight経由でモバイルにアプリをインストール(メール招待版)
- 0.14. MacでのFlutter開発環境構築(iOS&VSCode編)
- 0.15. 某SNSのチャットを真似る時に悩んだ話
- 0.16. Flutter で Stateを保持したまま画面切り替えができる BottomNavigationBar や TabBar の作り方
- 0.17. SwiftUIで画像をページングする
- 0.18. Xcode の力を借りない Swift の Dynamic Library の作成とビルドを試す
- 0.19. アンドロイドエンジニアが不足しているという噂について調べてみた
- 1. 概要
- 2. 現状の分析
iOSのARKitを使いこなしたい
# はじめに。
ARKitが提供されたのが、iOS11から。(iOS11: 2017/9/20)
そのARKitも3.0まで発表され、多くのことができるようになりました。ARを使いこなせるようにするために、**ARKitとARKitに関連したSceneKit・SpriteKitの概要やそのフレームワークらを使用する上で理解しておきたい用語・技術**を記しておきます。
(あくまで自分用に書いているため、少し解釈が違う部分があると思います。できるだけ他の人にもわかりやすいように努力していますが、わかりずらかったり違っていたらごめんなさい。。。)
# Sample
– [ARKit1.0 SampleCode](https://github.com/shu223/ARKit-Sampler)
– [ARKit2.0 SampleCode](https://github.com/kboy-silvergym/ARKit-Emperor)
– [ARKit3.0 SampleCode](https://github.com/1901drama/ARKit-Invader)# AR
iOSでちょっと多めのツールアイテムに対応可能なツール選択 UI Component
# SegmentedToolControl
お絵描き系のアプリや画像編集系のアプリを作成する時、多くのツールを用意したい場合があったりします。そんなツールを選択させたい場合に、`UISegmentedControl` を使いたいと思うことがあるかもしれません。ただ、`UISegmentedControl` はアイテムを横に並べるのは得意ですが、アイテムを縦に並べる事は正攻法ではできません。よって画面の横側に縦に並べたようなデザインにしようと思うと困ってしまいます。
また、画面のサイズの都合もあるので、アイテムの数が増えると、ずらずらと一列に並べるというわけにはいきません。アイテムをある程度グループに分類して、多段階的に選択できれば、画面の表示領域を節約できます。
今回はこんな目的の為に、必要に迫られて書いた `SegmentedItemControl` を公開できるように少々手を入れたので、紹介したいと思います。
`SegmentedToolControl` は GitHub より取得可能です。
https://github.com/codelynx/SegmentedToo
ARKitのはじめかた その2「オブジェクトを配置する(ARKit1版)」
# はじめに
こちらの続きです▶︎ [ARKitのはじめかた その1「5分で出来るARアプリ」](https://qiita.com/1901drama/items/c0eb01b16370c48f84cd)こんにちは!
[ARKitのまとめ記事](https://qiita.com/1901drama/items/cc9f598e3808fe7e32cb) にて書いた実装方法について
先ずはARKit1時代に使われていた「オブジェクト配置の方法」を書きます。
とはいえ、今もよく使う方法なのでモジュール的な感じで参考にして頂けると幸いです。# ゴール
タッチした場所に飛行機が出てきます。
![iOS のファイル.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222377/4b6ed8a2-0bd5-2723-c37a-9de40ac6dbc1.gif)# 前提
[ARKitのはじめかた その1「5分で出来るARアプリ」](https://qiita.com/1901drama/items/
iOS13のUISearchBarにつまずいた
# はじめに
今まで `UISearchBar` のテキストフィールドをカスタマイズしたい場合は下記のようにアクセスする方法が主流でした。“`swift
let textField = searchBar.value(forKey: “_searchField”) as? UITextField
“`しかし、iOS13 では実行すると下記のようなエラーとなりアプリがクラッシュします:scream:
“`
Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘Access to UISearchBar’s _searchField ivar is prohibited. This is an application bug’
“`>This is an application bug
:scream::scream::scream:
# 対応
iOS13 からは [`searchTextField `](https://developer.apple.com/docume
Xcode11.0の画面収録につまずいた
# はじめに
Xcode の シミュレータではターミナルで下記のコマンドを実行すると画面収録ができます。“`
xcrun simctl io booted recordVideo test.mov
“`しかし、Xcode11.0 で実行すると下記のようなエラーが表示されます:scream:
“`
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=22):
Selected interface does not suport video recording.
Invalid argument
“``simctl` コマンドについては下記の記事に詳しく書いてありました。
* [simctlコマンドを使ってみる](https://qiita.com/tamaki/items/02eb43253193b950b08f)
# 対応
## Xcodeのパスを確認する
複数バージョンの Xcode をインストールしていたのでとりあえず指定のパスが正しいか確認します
iOS13のPopoverにつまずいた
# はじめに
iOS13 で Popover 表示すると一部の画面で下記の左のような表示になることがありました。(表示している文言に特に意味はありません)
| 現実 | 理想 |
| — | — |
|||右のような表示になってほしいのになぜかラベルが見切れてる
# 対応
表示がおかしい!!と思いましたが私は事前に情報を仕入れていたので「ハッハーン Safe Area やな?」とすぐに対処できました。[20190920 iOS
Xcode11.2につまずいた
# はじめに
**現在Xcode11.2を使用している場合すぐにアップデートしてください!!**# UITextViewでクラッシュ
Xcode11.2には致命的なバグがあります。Storyboard,xibでUITextViewを使用していると**クラッシュ**します。
対応としてはStoryboard,xibでUITextViewを使わずにコードで書くしかないのですが、このバグに関してはすぐに修正され[Xcode11.2.1](https://developer.apple.com/documentation/xcode_release_notes/xcode_11_2_1_release_notes)がリリースされています。
現在(2019/11/29)ではXcode11.2だとApp Store Connectにアップロードできなくなっています。(下記参考)
[Xcode 11.2ではApp Store Connectにアップロードできない](https://dev.classmethod.jp/smartphone/iphone/cannot-upload-xc
iOS13のModalにつまずいた
# はじめに
iOS13からはUIViewControllerのmodalPresentationStyleのデフォルト値がfullScreenからautomaticに変更されました。これによってModal表示した際に下記のようになります。
今まではModalで表示する場合は閉じるボタンを置くなどして画面を閉じるために何か用意しないといけませんでしたが、iOS13からは下にスワイプするだけで閉じることができます。(やったね!!)
しかし、すべてのModal画面をこの表示にすると割と困ります…
# 対応
私が担当していたアプリではログイン画面->メニュー画面->各種メニュー
のような遷移をしていたのですが、この遷移がすべてModalだったためログイン後ずっと画面が少し下がった状態で表示されてしまい
iOS13のDark Modeにつまずいた
# はじめに
iOSアプリ作成初学者の方が下記のようにHello worldをやったとします。1. Xcodeでプロジェクトを作成
2. StoryboardのViewControllerにUILabelを設置
3. シミュレーターで起動やった表示できた!!よし実機でも見てみよう!!
あれっ!?UILabelが・・・消えた・・・!
それ、Dark Modeのせいかもしれもません。
# Dark Modeの対応
私が担当していたアプリは今回予算や時間の問題でDark Modeの対応はなくなりましたが何も対応しなくていいわけではありません。何もしないと冒頭のようなことが起こりえます。これはUIViewの背景色がwhite、UILabelの文字色がdefaultの時に起こります。
ダークモードにするとUIViewの背景色はそのままwhiteで表示され、UILabelの文字色は白っぽくなり見事に背景と同化してUILabelが見えなくなります。
## Light Mode専用にする
Info.plistに下記を追記してDark Mode非対応にしました。“`
iPadOSのUAにつまずいた
# はじめに
iPadOSのベータ版の頃からじわじわ話題に上がってましたが、iPadOSではUA(ユーザーエージェント)がMacOSと同じになりました。この記事とか
* [iPadOSのSafariはmacOSのSafariと区別できない可能性が高い](https://qiita.com/m-otoguro/items/00602315724d4a8e580c)
変わることはわかっていたのですが、遊びで作ってたサイトでこのUA変更に見事につまずきました。
# Webサイトのホバー対応でつまずいた
遊びで作ってたサイトのボタンのホバー時のアニメーションをPCとスマホ・タブレットでUA判定して切り替えていたのですが、iPadOSで見事にバグりました…下記がそのコードです。(前せっかく[CodePenの使い方](https://qiita.com/am10/items/3409c570186f1f87ccf5)について書いたのでCodePenで)
Fastlane pemでpush通知の証明書の更新
### Fastlaneでpush通知の証明書(Apple Push Notification Service)作成
iosアプリを作成している人であればおなじみの、push通知のための証明書、通称「pemファイル」。
こいつの期限が1年なので毎年更新しなくちゃいけないんですよね。
でも前にやったのは結構前だから、やり方調べるところから、、、と、やっていて気づいたら半日終わってた。
なんてことにならないようにfastlaneを使ってコマンド一つでベシっと作成できるようにしましょう。
### fastlaneのインストール
すでにインストール済みの人は飛ばしてください。“`bash
// xcodeコマンドのインストール
$ xcode-select –install// gemでのインストールだけど、fastlane pemを使う上でrubyの知識は不要
$ sudo gem install fastlane –verbose// 証明書を作るだけなら不必要 →飛ばしてOK
$ cd <プロジェクトのディレクトリ>
$ fastlane init
“`
任意のバージョンのCocoaPodsをアンインストール/インストールする
開発チーム内でCocoaPodsのバージョンを合わせる時用のメモ
## 指定バージョンのアンインストール
ターミナルで以下のコマンドを実行
`sudo gem uninstall cocoapods`以下のようにインストールされているバージョン一覧が表示されるので、
アンインストールしたいバージョンを選択する> Select gem to uninstall:
1. cocoapods-1.5.3
2. cocoapods-1.7.5
3. All versions## 指定バージョンのインストール
ターミナルで以下のコマンドを実行する。
例) 1.6.1をインストールする場合
`sudo gem install -v 1.6.1`## 現在のバージョンを確認する
ターミナルで以下のコマンドを実行する。
`pod –version`今入っている最新バージョンが表示される
TestFlight経由でモバイルにアプリをインストール(メール招待版)
TestFlight経由でモバイルにインストールする方法を記録しておきます。
# TestFlightとは
AppをApp Storeでリリースする前にユーザーをテストに招待し、有益なフィードバックを容易に受けることができるAppleのサービスです。期間限定で最大10,000人の外部テスターを招待できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/6c830041-e5ed-71ad-8b14-dd2b7f16bbb7.png)# 前提
– アプリ管理者にAppleIDとなるメールアドレスを伝え、招待メールが届いている
– アプリ管理者に伝えたAppleIDでログインしているiOSデバイスでの操作
– [TestFlightアプリ](https://apps.apple.com/jp/app/testflight/id899247664)をStoreからインストールしている
– モバイルアプリのテスト目的である# 手順
以下の招待メールが届くので、[Vie
MacでのFlutter開発環境構築(iOS&VSCode編)
#1.Flutterインストール
## 1.1 Flutterをダウンロード
FlutterのサイトからSDKをDLします。
https://flutter.dev/docs/get-started/install/macos## 1.2 SDKを解凍
任意のディレクトリにSDLを解凍
“`
$ cd ~/src
unzip ~/Downloads/flutter_macos_v1.9.1+hotfix.6-stable.zip
“`## 1.3 パスを通す
.bashrcにパスを追加。
“`
$ vi ~/.bashrc
“`
[PATH_TO_FLUTTER_GIT_DIRECTORY] はflutterがあるディレクトリを指定。
今回でいうとsrcになる“`
export PATH=”$PATH:[PATH_TO_FLUTTER_GIT_DIRECTORY]/flutter/bin”
“`追加したらファイルを保存して変更を反映。
“`
$ source ~/.bashrc
“`echoでパスが追加されたか確認。
“`
$ ec
某SNSのチャットを真似る時に悩んだ話
#はじめに
[Firebase Advent Calendar 2019 6日目](https://qiita.com/advent-calendar/2019/firebase)の記事になります前日の5日目は[@watanabe_yu](https://qiita.com/watanabe_yu/items/3184a88072647112ed4b)さんが投稿された[Firebaseをなるべく安い料金で頑張りたい人へ](https://qiita.com/watanabe_yu/items/3184a88072647112ed4b)というタイトルの記事でした!
最近よくFirebaseって聞くけどぶっちゃけコスト面どんな感じなの?と気になる方もいらっしゃると思うので参考にしてみると良いですね!
前日の記事の紹介はここまでにして今回の記事は、
Firebaseを使用してチャット開発、その中でもルームの扱い方で悩んだのでその悩みと解決策を書いてみようと思います#開発中の悩みと解決策
## メンバーが二人のルーム作成方法
チャットにはルームという概念が存在してますよね。
そ
Flutter で Stateを保持したまま画面切り替えができる BottomNavigationBar や TabBar の作り方
## はじめに
[ユアマイスター Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yourmystar) の6日目の記事です。
ユアマイスターでは、 [あなたのマイスター](https://yourmystar.jp/) でハウスクリーニングや修理などのサービスを提供するプロや職人が利用する店舗向けアプリ「マイスターアプリ」 ([Android版](https://apps.apple.com/jp/app/id1478724946?l=ja), [iOS版](https://apps.apple.com/jp/app/id1478724946?l=ja)) があります。
このアプリでは、Flutterを採用しており、2019年10月にリリースされました。(その他の技術スタックは [こちら](https://yourmystar-engineer.hatenablog.jp/entry/2019/11/25/090000))このアプリには、 BottomNavigationBar や TabBar など使
SwiftUIで画像をページングする
# はじめに
今作っているアプリで、Instagramのように写真をページングで表示したいと思い、SwiftUIのCustomViewを作ってみました。SwiftUIのScrollViewのscrollイベントを検知する方法や、ScrollViewをprogrammaticallyにscrollする方法を見つけるのに苦戦したので、同じことをしたい人にとって きっと役に立つと思います。
# 完成イメージ
![ImagePagerDemo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94278/1d1833ff-9685-61e8-eeff-deefee214e07.gif)
E7系、かっこいい
# ソース
画像、”e7_square”,”e5_square”,”doctor_yellow_square”は、お手持ちの画像に置き換えてください。
“`ImagePager.swift
import SwiftUIstruct ImagePager: View {
var im
Xcode の力を借りない Swift の Dynamic Library の作成とビルドを試す
この記事は [ドワンゴ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dwango) の 5 日目の記事でしたが、遅刻しました :pray:
去年の今頃はサーバサイドエンジニアとして [GraphQL サーバおよびクライアントの設計・開発等](https://qiita.com/tasuwo/items/984e6f594cde94e4224e) に携わっていましたが、今年の6月から iOS エンジニアとして働きはじめました。雑多な技術系のメモは普段は [scrapbox](https://scrapbox.io/tasuwo-ios/) に載せています。
今秋、チームのメンバー数名と [iOSDC Japan 2019](https://iosdc.jp/2019/) に参加し、[Swiftにおけるインポートとリンクの仕組みを探る](https://speakerdeck.com/kishikawakatsumi/swiftniokeruinpototorinkufalseshi-zu-miwotan-
アンドロイドエンジニアが不足しているという噂について調べてみた
概要
最近アンドロイド開発におけるエンジニアが不足しているという話をよく聞く様になった。特にkotlinエンジニアはグーグルがkotlinファーストを掲げるなど需要がかなり高まってると言われている。しかし、swiftの様に今まで人気がなかったことや、Javaで開発していたことが多かったためkotlinで開発ができるエンジニアの供給が追いついていないのが現状である。売り手市場といわれるAndroidエンジニアのについて、その真相を調査した。
現状の分析
まず、エンジニアの単価をiOSとAndroidで比較してみようと思う。
アンドロイドエンジニアの単価
フリーランスエンジニア運営事務局の調べによると、下記の様になっている。
Android経験1年未満 25万円~30万円/月(週5常駐案件の相場単価)
Android経験1年 30万円~45万円/月(週5常駐案件の相場単価)
Android経験2年 40万円~55万円/月(週5常駐案件の相場単価)
【Firebase Analytics】Universal Links/App Linksでアプリを起動した回数が知りたい
# はじめに
* この記事は[オールアバウトアドベントカレンダー](https://qiita.com/advent-calendar/2019/allabout)6日目の記事です。
* これまでモバイルアプリ(Android, iOS)の集計にGoogleアナリティクスSDKを利用していたのですが、**[2019年10月にGoogleアナリティクス開発者サービスSDKが終了](https://support.google.com/firebase/answer/9167112?ref_topic=6386699&authuser=1) しました(Googleアナリティクス 360 のユーザーのプロパティには影響はありません)**
* 今後のモバイルアプリ向けの集計は、Firebase SDKを利用して集計する**Firebase Analytics**に移行する必要があります
* [Firebase 向け Google アナリティクスについて](https://support.google.com/analytics/answer/9165830?authuser=1)
*