- 1. #21 UIScrollViewの使い方1例
- 2. アプリを初めて起動したときに画面の使い方を教えてくれるコーチマークを実装
- 3. スマホアプリのUIデザインについて知っておきたいこと
- 4. 1つのTableViewに単一選択と複数選択のセクションを用意する
- 5. Google Maps SDK for iOS で現在地を表示
- 6. [Swift4] カスタムViewを作って画面下からフェードイン・画面下へフェードアウトさせる方法
- 7. 【Storyboard】遅延初期化しているViewModelをDIしてViewControllerをテスト可能にする
- 8. UIButtonのsystemとcustomのデフォルトの挙動の違い
- 9. QRコードを使ったiOS端末とMac間のリンク共有
- 10. [iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Observer~
- 11. #20 TabBarControllerにTabを追加する1例
- 12. FMDBとMantleライブラリーとMTLFMDBAdapterでORMを実現する
- 13. 【Swift5】CryptoKitで実ファイルの暗号化・復号を行う
- 14. MetalShaderをPythonistaで遊ぶ
- 15. UNNotificationServiceExtensionを実装したときの罠
- 16. 【脱獄】ios実機でlldbを使う
- 17. AppStore への iOS アプリ登録 リジェクト事例(2020/1)
- 18. 【Unity】Screen.safeAreaとiOSステータスバーの罠(?)
- 19. ABM(Apple Business Manager)なら非公開のアプリでもAppStoreで限定配布できる
- 20. tableviewcellのindexPathの値を次の画面に受け渡す方法
#21 UIScrollViewの使い方1例
#はじめに
個人のメモ程度の出来なのであまり参考にしないで下さい.#環境
Xcode:11.2.1
Swift:5.1.2
2019/11##part1
`UINavigationBar`と検索する.##part2
`UINavigationBar`を`UIViewController`に追加する.アプリを初めて起動したときに画面の使い方を教えてくれるコーチマークを実装
# コーチマークとは
よくアプリを初めて起動したときに、画面の機能を紹介してくれるものです。
こういう感じに使い方を教えてくれます。
機能が多くなると、どうしてもUIが複雑になります。
そうすると、初めて触るユーザーは困惑してしまうかもしれません。
できるだけ、説明しなくても扱えるように設計するのが最善なのでしょうが、そうは言ってられないこともありますからね。
コーチマークを付ければ、初めて使うユーザーでもどのボタンを押せば何が起こるのかが、わかりやすくなります。# ライブラリをインストール
いろいろあるのですが [ephread/Instructions](https://github.com/ephread/Instructions) を使ってみました。
“`:Podfile
pod ‘Instruct
スマホアプリのUIデザインについて知っておきたいこと
# はじめに
スマホアプリのエンジニアとして、UIデザインについて知っておきたいことをまとめておきます。
自分用のリンク集のような意味合いが強いですがお役に立てば幸いです。# 公式資料
一度は目を通しておきたい基本的で重要なドキュメントです。### Apple
– [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)
– 現在は英語版しかないようです
– [Apple Design Resources](https://developer.apple.com/design/resources/)
– デザインツール用のテンプレートファイルなどがあります
– [Material Design](https://material.io/design/)
– こちらも現在は英語版しかなさそう
– [Android のマテリアル デザイン](https://developer.android.com/guide/topics/
1つのTableViewに単一選択と複数選択のセクションを用意する
※開発環境: Xcode11.3/Swift5.1.3/端末(iPhone6s/iOS13.3)
# 経緯
とあるTableViewでセクションによって単一選択か複数選択かを分岐したい時ってありますよね。そうですよね、ええ、はい、あんまりないですよね。最近、初めて出会いました。
経験浅なので、セクション毎の設定とかできるんでしょうくらいに思っていたら、そんなものはなく、中々苦労したので今回取り上げました。# ひとまず完成GIF
銭湯セクションのみ単一選択で、他のセクションは複数選択で設定しています。
銭湯の選出については適当です(おすすめがあればコメントください)。
# 実装方法
今回の表題に関係のない箇所は省きます。
一応Repositoryのリンクは載せておきます。
[SingleAndMultipleSelecti
Google Maps SDK for iOS で現在地を表示
# はじめに
Google Maps SDK for iOS を使用する機会が多いので、
備忘録として Google Map をアプリ上に表示→現在地を表示するところまでをまとめておきたいと思います。# 開発環境
– Xcode:11.1(11A1027)
– Swift 5
– iOS:13.1# 実装
以下のような Step に分けて実装していきます
1. Google Maps SDK for iOS の Key を取得
2. Google Map をアプリ上に表示
3. 現在地を Map 上に表示## 1. Google Maps SDK for iOS の Key を取得
[こちら](https://developers.google.com/maps/gmp-get-started)の手順に沿って API Key を取得します
## 2. Google Map をアプリ上に表示
[こちら](https://developers.google.com/maps/documentation/ios-sdk/start)に沿ってアプリ上に表示します
[Swift4] カスタムViewを作って画面下からフェードイン・画面下へフェードアウトさせる方法
AppStoreで公開している[ShodoCAM](https://apps.apple.com/jp/app/shodocam/id1452049446)の開発をしていて,あるボタンを押すとカスタムViewが下から出てくるアニメーションを実装したかった.その後カスタムViewを下にフェードアウトさせる機能も実装する.
## 手順
1. カスタムViewのxibファイルを作る
2. カスタムViewクラスを作る
3. カスタムViewのxibとカスタムViewクラスを紐付け
4. カスタムViewのフェードイン・フェードアウト実装### 1. カスタムViewのxibファイルを作る
xibとは(XML Interface Builder)の略で,アプリのUIとして使いまわせるカスタムViewを作るファイルです.StoryboradではアプリのあるView全体を作り,xibでUIのパーツを作って複数のViewで使い回すと覚えておけば良い.
xibファイルはコンパイルされてnibファイル(NeXTSTEP Interface Builder)に変換されるみたい.
[参考記事 (W
【Storyboard】遅延初期化しているViewModelをDIしてViewControllerをテスト可能にする
# はじめに
ViewModelのinitializerに引数がある場合に、ViewController側で以下のような遅延初期化をすることが多々あります。
このViewControllerにViewModelを注入してテストをしたい場合に、どうすれば注入することができるようになるでしょうか。本投稿では以下の2点を重視して、既存のプロジェクトでも導入できる方法を解説していきます。
– Storyboardを用いてViewControllerが初期化される
– ViewModelの既存のインターフェースを大きく変更しない※ Combine.frameworkを利用していますが、RxSwiftでも同様の実装が応用できます。
※ GitHubで[ソースコード](https://github.com/marty-suzuki/LazyInitializedViewModelInjectionSample)も公開しています。“`swift:ベースとなるViewControllerの実装
final class CounterViewController: UIViewContr
UIButtonのsystemとcustomのデフォルトの挙動の違い
UIButtonのsystemとcustomのデフォルトの挙動(色変化など)について調べる
– normal
– highlighted
– disabled
– selectedの4状態について
– テキストのみ
– フォアグラウンドの画像を指定(normalに指定)、テキストなし
– バックグラウンドの画像を指定(normalに指定)、テキストありの3パターンを調べる。画像は彩度と明度を金融会社のイメージカラーぽくした緑色を用いる。
Xcode 11.3
シミュレータ iPhone8 iOS13.3#Normal
![Normal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46631/0a378cfe-a377-e94d-98a6-2c20352e0f41.png)
左がsystem、右がcustom
上から、文字のみ、フォアグラウンド画像指定で文字なし。バックグラウンド画像指定で文字あり。文字色はnormalが青、customが白。
systemのフォアグラウンド画像指定
QRコードを使ったiOS端末とMac間のリンク共有
# はじめに
iOS端末から開発中のWebサイトを開きたい時に、iOS端末のブラウザでURLを直接入力するのは面倒ですよね。(例えば、Mac側でngrokで生成したリンクをモバイル端末で素早く開きたい時など)
これらを解決する方法としては、
* iCloud経由の同期
* Google Chrome経由の同期
* AirDrop経由のリンク共有などがあります。(他にもあるかと思いますが。。)
ただ、iCloudやGoogle Chromeといったアカウント連携したものは個人の環境ではOKでも、会社で同じアカウント連携するのは面倒かもしれません。AirDropの場合はiOS端末側で設定を有効化すると利用できるため、割とリンク共有方法として手間がかからずに良いかなと思います。
ここでは、アカウント連携が不要な“`QRコードを使ったリンク共有“`について書きたいと思います
# 大まかな手順
単純に以下をやるだけです。
1. Mac側でURLを含むQRコードを生成する
2. iOS端末側でQRコードを読み込む# Mac側でQRコードを生成
文字列をQRコード化する
[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Observer~
この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
**ごく普通のiOSアプリ開発でよくある状況**や
**Swiftのコアライブラリやフレームワークで使われているパターン**に
着目してデザインパターンを学び直してみた記録です。**関連記事一覧**
[[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン](https://qiita.com/y-some/items/96db5f24ded4a1fab48f)# Observerパターン概要
– Observerとは「観察者」という意味です。
– **オブジェクトの状態が変化した際に、そのオブジェクト自身が、「観察者」に状態の変化を「通知」する仕組みです。**
– GoFのデザインパターンでは**振る舞いに関するパターン**に分類されます。
– iOSアプリ開発では、他のどのパターンよりも実用的なパターンと思います。# 使い所
実務においては、ViewControllerにAPI通信やデータ取得/更新などのロジックを詰め込むとViewControllerが肥大化してしまい、保守性
#20 TabBarControllerにTabを追加する1例
#はじめに
個人のメモ程度の出来なのであまり参考にしないで下さい.#環境
Xcode:11.2.1
Swift:5.1.2
2019/11##part1
プロジェクトに`UIViewController`を追加する.##part2
`control`キーを押しながら`TabBar
FMDBとMantleライブラリーとMTLFMDBAdapterでORMを実現する
###FMDBとMantleライブラリーとMTLFMDBAdapterでORMを実現する
####利点
Modleを生成できる
SelectだけSql文で書けに自由がきく
Insert Update Delete はSQKは自動生成
外部キーとカスケードが使える
使いやすいSqliteエディターが使える
入出力時に値の自動変換機能を利用できる
Cocoaでデーターベースアプリを作る時に便利“`objc
Podfile
pod ‘FMDB’, ‘2.6’
pod ‘Mantle’
“`
Mantle
https://github.com/Mantle/MantleMTLFMDBAdapter
https://github.com/tanis2000/MTLFMDBAdapter#####Select処理
“`objc
-(NSMutableArray*)_select:(NSString*)sql className:(id)className{NSError *error = nil;
FMResultSet *resu
【Swift5】CryptoKitで実ファイルの暗号化・復号を行う
#概要
サンドボックス内に保存しているファイルについて、iOS13から追加されたフレームワーク「CryptoKit」を使って「暗号化・復号」する方法を紹介したいと思います。暗号化・復号というとパディングやらなんやらで面倒な印象を受けますが、
CryptoKitを使うと簡単に相互に変換出来てしまいます。参考プロジェクトを作ったので、こちらを元に紹介していきます。
https://github.com/o-mo-te/Swift_CryptoKit※ CryptoKitはiOS13以降でしか動作しないのでご注意を!
#環境
Xcode: 11.3.1
Swift: Swift5#SymmetricKeyの生成
まず暗号化・復号を行うには鍵が必要です。
鍵の生成は以下のコードで生成できます。
(今回はSymmetricKeySizeを256にしました。)“`swift:Sample.swift
// 鍵の生成
let encryptionKey: SymmetricKey = SymmetricKey(size: .bits256)
“`#暗号化を実行
生成した
MetalShaderをPythonistaで遊ぶ
## 概要
[Pythonista](https://apps.apple.com/jp/app/pythonista-3/id1085978097)上でMetalShaderを動かすためのツールを書きました
https://github.com/watosar/MetalEditor
## 動機
ふとShaderの勉強がしたくなったのですがiPhoneではよい環境が見つかりませんでした
pythonistaでは元からGLSLは簡単に動かせるようになっていますが、非推奨になりましたし、折角なのでMetalShaderを動かせる様にしました## 詳細
エディタ画面を透過してシェーダーの動作が後ろで見える様にPythonistaのUIに変更を加えるスクリプトです
キーボードを閉じると透過率が上がります
flagmentの引数で
UNNotificationServiceExtensionを実装したときの罠
## Bundle Identifier
アプリ本体のBundle Identifierをprefixとして命名する
### 例1
|ターゲット|Bundle Identifier|
|:–|:–|
|アプリ本体|work.d128.stockey|
|UNNotificationServiceExtension|work.d128.stockey.notificationservice|
### 例2(本番とBundle Identifierを分けている場合)
|ターゲット|Bundle Identifier|
|:–|:–|
|アプリ本体|work.d128.stockey.dev|
|UNNotificationServiceExtension|work.d128.stockey.dev.notificationservice|# プロビジョニング
UNNotificationServiceExtensionで指定したBundle Identifierでプロビジョニングを作成して設定する必要がある# VersionとBuild
アプリ本体とVersionとBuil
【脱獄】ios実機でlldbを使う
# 記事の要約
脱獄済み脱獄端末でlldbを動かすには`debugserver`を`/usr/bin`に配置すれば良い
# 本編
## 対象読者
– ios実機でlldb等のデバッガを動かしたい人
– 闇の技術が好きな人## 用意するもの
– 脱獄済みios実機(OpenSSHとか入れとく)
– MacOS
– XCode(最新版)## やり方
まずは以下のコマンドをターミナルに入力して移動
“““shell
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
“““何があるか確認
“““shell
ls
“““おそらくこんな感じ
“`
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
❯ ls
10.0 10.1 10.2 10.3 11.0 11.1 11.2 11.3 11.4
AppStore への iOS アプリ登録 リジェクト事例(2020/1)
AppStoreへのアプリの更新申請でリジェクトとなった事例をご紹介します。
# リジェクト内容
“`:From AppStore 審査チーム
メタデータ却下済み
“`
今回、iPhone X 向けのレイアウト調整を行ったので、その旨をAppStore Connectの **このバージョンの最新情報** に記載したのですが。。。# リジェクト原因
“`:このバージョンの最新情報への記載内容抜粋
・IPhneX向けに表示の調整を行いました。
“`
おはずかしいことながら、 **iPhone X** のつづり違いが今回のリジェクトの原因でした。
このあたりはどちらかというと、ロボットでチェックされているのかもしれないなと思いました。# まとめ
プロダクト名のつづりを直して再申請したら無事審査を通過しましたが、こういったちょっとしたミスで再申請が必要になり、審査通過までにまた数日を要することになります。
更新内容にプロダクト名等の固有名詞が入る場合には、申請ボタンを押す前に、一度立ち止まって初歩的なミスがないか確認するようにしましょう。
【Unity】Screen.safeAreaとiOSステータスバーの罠(?)
# Unityで取得できる Screen.safeAreaには罠(?)がある
罠に遭遇したのは、以下の条件
– 4.7インチiPhone(iPhone6/7など)
– Unity2017.4.35, 2018.4.15
– iOS10|OS|Screen.safeArea.h|Screen.height|ステータスバー高さ|
|—|—|—|—|
|iOS12|1294|1334|40|
|iOS10|1334|1334|40|– iOS11以降だとsafeAreaのRectは正しくステータスバーを避けてくれるが、iOS10だと重なってしまう
# 原因
– そもそもsafeAreaの導入がiOS11から
– Screen.safeAreaは単純にsafeAreaInsetsをOS判定して取得しているだけだと思われる
– iOS10以下はエラーにならないようにしているだけ?# 解決策
– OSを取得して分岐するしかなさそう
– iOS10以下ならiPhoneX系統は存在しないから、ステータスバーは 20 x scale で固定…?
–
ABM(Apple Business Manager)なら非公開のアプリでもAppStoreで限定配布できる
## はじめに
通常、Apple Developer Program で非公開のアプリを配布しようとすると、Device100台の壁に打ちあたります。
Apple Enterpriseに契約できるほど企業としての実績もない、けど100台以上アプリを社内配布したい!
そんなときはApple Business Managerでアプリ配布する方法があります。> ビジネスや教育機関へ App を配信する
> App Store で公開される App はすべて自動的に Business Manager と Apple School Manager でも同じ価格で一括購入できるようになります。企業や教育機関はそこから App をダウンロードして一括配信できます。教育機関には App を割引価格で提供できます。また、**特定の企業だけに App のダウンロードを許可することもできます。これには、自分の組織の内部で使用するために非公開の App を配信する場合も含まれます。** このオプションは、未承認の App のみに使用できます。Apple Business Manager と Apple
tableviewcellのindexPathの値を次の画面に受け渡す方法
## 筆者の状況
まず英語の単語帳アプリを作成していて、DBはRealmを使用しております。
そこでビューコントローラー間の値の受け渡しにはまったので共有します。
### したかったこと
単語を追加して
登録した単語がセルに追加される
登録した単語のセルをタップしたら
そのセルの詳細が見れるセルをタップしてそのセルの番号を取得←
これがむずかった!
## git
ソースコードは以下にあります。
まだ作成途中なので日々更新されるかもです。
https://github.com/sventouz/Tangocho
### 流れ
流れはこんな感じになっております。
![スクリーンショット 2020-01-31 18.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/1e1bb7fb-b7b7-b026-a251-136ea77d110e.png)
## ソースの説明をしていきます
※細かい全てのソースの説明は致しませんのでご了承ください。
まずセルの番号