iOS関連のことを調べてみた2020年02月03日

iOS関連のことを調べてみた2020年02月03日

#21 UIScrollViewの使い方1例

#はじめに
個人のメモ程度の出来なのであまり参考にしないで下さい.

#環境
Xcode:11.2.1
Swift:5.1.2
2019/11

##part1
`UINavigationBar`と検索する.

スクリーンショット 2020-02-03 午前0.24.22.png

##part2
`UINavigationBar`を`UIViewController`に追加する.

スクリーンショット 2020-02-03 午前0.24.36.pngアプリを初めて起動したときに画面の使い方を教えてくれるコーチマークを実装

# コーチマークとは

よくアプリを初めて起動したときに、画面の機能を紹介してくれるものです。

こういう感じに使い方を教えてくれます。

機能が多くなると、どうしても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/)
– デザインツール用のテンプレートファイルなどがあります

### Google
– [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`を追加する.

スクリーンショット 2020-02-01 午後11.17.29.png

スクリーンショット 2020-02-01 午後11.17.54.png

##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/Mantle

MTLFMDBAdapter
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)

## ソースの説明をしていきます

※細かい全てのソースの説明は致しませんのでご了承ください。

まずセルの番号

元記事を表示

OTHERカテゴリの最新記事