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

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

iOS14のおすすめショートカット3選

iOS 14の[ショートカットアプリ(App Store)](https://apps.apple.com/jp/app/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88/id915249334)をインストールすると、
普段の操作の自動化などが簡単に設定可能です。

今回は特におすすめのレシピを3つご紹介します。

## ① 毎晩のアラームセット、音量調整を自動化 ⏰
アラームの音を大きくするのを忘れており聞こえなかった・・・なんて事態を防ぎます!

#### オートメーション内容
– 毎晩0:00に実行
– アラーム1~3をONに変更
– 音量を55%に設定
– デバイスを振動させる(設定完了の合図)

## ② Kindleを開き、本の読み上げを開始 ?
ランニング・乗車時などに、ワンタップでKindle本の読み上げを開始することが可能です。

#### ショートカット内容
– Kindleで私の本を開く(最後に開いていた本が開く)
– 3秒待機(アプリ起動後、本が開くまでの待ち時間)

元記事を表示

SwiftUIでトグルのカスタムスタイルを適用

SwiftUIでは、`ToggleStyle`を使用してトグル(スイッチ)の外見をデザインすることができます。トグルの色、形、アニメーションの変更を行うことが可能です。

image

## `ToggleStyle` の構造体

始めるにあたり、先ず `ToggleStyle` タイプに対応する構造体を実装する必要があります:

“`swift
struct NewToggleStyle: ToggleStyle {

func makeBody(configuration: Configuration) -> some View {
// トグルのUIコンポーネント
}

}
“`

この形式を適用するには、このコードを利用してください:

“`swift

元記事を表示

PHPickerViewControllerでの写真アクセス権限を必要としない実装

iOS14の大きな変更点の一つに写真アクセス権限の追加です。
またそれに合わせて写真アクセス権限を必要とせず、別プロセスによる写真選択が可能なPHPickerViewControllerも用意されました。

UIImagePickerで行っていた写真選択機能もそのまま使用することも可能です。
ただし、写真のアクセス権がlimited(指定した写真のみ選択可能)とした場合でも、すべての写真が表示されてしまうためユーザビリティが悪くなります。

iOS14対応時にはPHPickerViewControllerでの実装がおすすめです。

##環境
Xcode12
iOS14.01

## PHPickerViewControllerの表示

PHPickerViewControllを表示するコードは以下のようになります。
選択した画像をそのまま表示するだけならPHPickerConfigurationに引数は必要ありません。
あとからアセット識別子を取得したいなどであれば以下のように実装します。

iOS14専用となるのでavailableを指定しましょう。

“`swift
@avai

元記事を表示

UICollectionView must be initialized with a non-nil layout parameter

## なんか落ちる

`UICollectionView`をコードで追加したところ、`UICollectionView must be initialized with a non-nil layout parameter`エラーが。。。

“`Swift
let collectionView = UICollectionView(frame: view.frame)
collectionView.delegate = self
collectionView.dataSource = self
view.addSubview(collectionView)
“`

## 解決方法

コードで`UICollectionView`を追加するときは、`FlowLayout`をinit時に追加しなければならないらしい。

“`Swift
let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: 100, height: 100)
let collectionView = UICo

元記事を表示

UIViewRepresentableを使ってSwiftUIでちょっとリッチなWebviewを表示してみる

## はじめに
iOS14時点でのSwiftUIでは現在、WKWebViewに相当するViewのサポートを行っておりません。
そのため、UIKitのWKWebViewをSwiftUI用にラップして使用することが必要となります。
今回は基本的な機能(ツールバー、プログレスバー)を搭載したWebViewを表示させることをゴールとし、その中で出てくる`UIViewRepresentable`の使い方についてまとめていきたいと思います。

※ 本記事では汎用性を考え、iOS13まででサポートされている技術を使用してWebViewの表示を行います。

## UIViewRepresentableについて
UIKitのViewをSwiftUIで使用するには`UIViewRepresentable`を使用する必要があります。
`UIViewRepresentable`とはSwiftUIにてUIKitのViewを使用するためのラッパーです。
`UIViewRepresentable`のプロトコルで定義されている各関数について説明します。

“`swift
func makeUIView(contex

元記事を表示

Xcode 12 で自作 framework ビルド時に lipo コマンドがエラーを吐くようになった

# 現象

iOS用に自作の framework を fat でビルドしていました。(おそらく[ここ](https://gist.github.com/cromandini/1a9c4aeab27ca84f5d79)をコピペ。)
Xcode 12 に上げたところ、下記のようなエラーが出るようになってしまいました。

“`
fatal error: lipo:
***/Debug-iphonesimulator/***.framework/***
and
***/Debug-iphoneos/***.framework/***
have the same architectures (arm64) and can’t be in the same fat output file
“`
※ 見やすいように伏字と改行を入れています。

# 原因

Xcode 12 から、iPhoneシミュレーターも arm64 向けにビルドするようになったようで、従来実機にのみ含まれていたのが両方に含まれるようになり、コンフリクトしてしまったようです。

参考: [Stackoverflow:

元記事を表示

FlutterやってみたよPart7(retrofit導入)

# 初めに

ほとんどのアプリがapi通信をすると思います。
なんか楽にクライアント生成できるのないかな〜と調べていたらretrofitというライブラリを見つけました。
今回はそれを導入してみようと思います。

– [retrofit](https://pub.dev/packages/retrofit)
– [retrofit導入YouTube](https://www.youtube.com/watch?v=7VYwtpaZEhg)

# サンプルアプリ

まずはサンプルアプリの仕様をざっくり決めます。

– Qiitaのapiを使用して最新記事を取得する
– 取得した記事を一覧で表示する
– 記事のタイトルをタップしたら記事詳細をwebviewで開く

今回はこんな感じの簡単なアプリにします!

# retforitの仕組み

導入する前にざっくりとどういう仕組みで動くのか理解します。
公式のReadmeやSampleを見ればなんとなくわかると思いますが、
abstractでapiのエンドポイントを定義。
この定義されたファイルを元にクライアントの実体を自動生成する仕組みで

元記事を表示

Firebase AnalyticsをiOSに組み込む

#自分用メモ
Google Analyticsが終了し、FirebaseにAnalyticsが移ったので
そっち経由でアプリに導入する。

##手順
概要をこの記事を読んで同じことする

Firebase Analytics の First Step ! iOSアプリにイベントとユーザプロパティを仕込んでみた

##つまった
Xcode側のコンソールには表示されるのに、なぜかFirebaseのDebug Viewに表示されない

##解決策
Product->Edit Schemaから以下のタグを追加
-FIRAnalyticsDebugEnabled
-FIRAnalyticsDebugEnabled

無事表示される。

元記事を表示

iOS 14からUNNotificationPresentationOptionsの「.alert」が「.banner」と「.list」に分かれた

## はじめに

プッシュ通知の表示オプション( `UNNotificationPresentationOptions` )に `.alert` がありますが、iOS 14までで非推奨になりました。
代わりに `.banner` と `.list` の2つに分かれ、これらの挙動を調べたので紹介します。

## 環境

– Xcode:12.0 (12A7209)
– Swift:5.3
– iOS:14.0

## プッシュ通知の挙動

以下の表の通りです。

`.alert` ではバナーと通知センターの両方に通知が来ましたが、iOS 14からは `.banner` と `.list` を使うことでどちらか片方のみに通知が来るようにできます。

|UNNotificationPresentationOptions|バナー|通知センター|
|:–|:–|:–|
|`.alert`|![Simulator Screen Shot – iPhone SE (2nd generation) – 2020-09-29 at 13.56.50.png](https://qiita-image

元記事を表示

【Swift】WidgetKit使用時に、入力された文字をUserDefaults経由でWidgetに表示する方法

前回こちらの記事[【Swift】iOS14.0から追加されたWidgetKitを簡単に実装する方法](https://qiita.com/yajima_tohshu/items/85e01a19db6cfc16ca92)
で、WidgetKitを使用する方法を記載しましたが、
今回はWidgetKitをExtensionとして追加後、UserDefaults経由で値を共有する方法を記載します。

#環境
– Xcode: 12.0
– Swift5

#下準備
※前提として既にTargetからWidgetKitが追加されていることとします
####1. CapabilityからAppGroupを追加
TargetをWidgetApp(WidgetKitを追加した元となるProject)に選択し、CapabilityからAppGroupをダブルクリックしAppGroupを追加します。
![スクリーンショット 2020-09-29 11.47.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656690

元記事を表示

モバイルアプリにおけるUIデザイン

#1.はじめに
私は(筆者は)モバイルエンジニア転職を目指す立場です。個人的にアプリのUIデザイン知識はデザイナーだけでなくエンジニアにも必須だと思っています。私自身がアプリ開発の過程でデザインについて指摘され、「このままデザインに無知では良くないと思った」、「同じような立場の方にモバイルアプリのデザインの事を少しでも知ってもらいたいと思った」その2つの理由から本記事を執筆しました。
現在、エンジニアを目指している方やアプリ開発はしているけどモバイルデザインについて改めて知りたいという方、そのような方向けに改めてiOS・Android双方のデザインガイドラインについてまとめてみました。

#2.iOSとAndroidのデザインの考え方
2020年現在、iOSではHuman Interface Guidelines、AndroidではMaterial Designの考え方をもとにアプリUIが作られています。双方の公式ページはモバイルアプリを構成する UI の基本指針が細かく記されているのでエンジニア&デザイナー必読です。AppleよりGoogleの方が画像や映像を多く使って解説しているた

元記事を表示

画像分類モデルをCore MLに変換する

#画像分類モデル変換はクラス・ラベルを指定する
![スクリーンショット 2020-09-29 13.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/3ed0f04f-6702-2206-eebf-2aa8341ccf67.png)
###1,クラス・ラベル・ファイルを読み込む。
クラスラベルファイルはモデルの作成者から提供されていることが多いみたいです。

“`python
class_labels = open(‘labels.txt’, ‘r’).read().splitlines()
print(class_labels)
### [‘black’, ‘white’, ‘grey’, …]
“`

###2,クラス・ラベルがString型の配列であることを確認しておきます。

“`python

for i, label in enumerate(class_labels):
if isinstance(label, bytes):
class_l

元記事を表示

TensorFlow1のモデルをCore MLに変換する

#グラフからの変換

TensorFlow1からの変換は、
**1、凍結グラフからの変換**
**2、グラフからの直接変換**
があります。
*1、の凍結グラフの作成方法については「[AnimeGANv2をCore MLに変換してiOSでつかう](https://qiita.com/john-rocky/items/e4c757306b4d8f0f2c36)」とおなじです。*

#TensorFlow1の変換

###1、凍結グラフからの変換

“`python

mlmodel = ct.convert(‘inferrence.pb’)
“`
###2、グラフからの直接変換

“`python

mlmodel = ct.convert(self.sess.graph)
“`
グラフからの直接変換は、sess.runしているスクリプトの下に書き込んでしまうのがおすすめです。

****
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

[Twitter](https:

元記事を表示

iOS14でのCore Location変更点

# iOS14でのCore Location

こんにちは、今回は業務でiOS14で変更になったCore Location周りの改修をしたので、備忘録的に書かせていただきます。
あんまり記事がなかったので、誰かの役に立てば幸いです!

## 環境
macOS Catalina 10.15.6
Xcode Version 12.0.1

## Deprecated

まずDeprecatedになったものを調査しました。
対象は今回iOS14だと使えない物についてまとめます。

### CLLocationManager
#### Requesting Authorization for Location Services
– authorizationStatus()

“`swift
class func authorizationStatus() -> CLAuthorizationStatus
// 位置情報サービスを利用するためのアプリの認証状況を返します。
“`
#### Initiating Beacon Ranging Requests

“`swift
func

元記事を表示

[Xcode12.0.1]SpriteKitで全画面表示する

今回久々にSpriteKitに触れる機会があり、開始早々ハマりポイントがあったので備忘もかねて残しておきます。

# 解決したかった課題
対応前 | 対応後
:—: | :—:
![スクリーンショット 2020-09-28 22.38.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172991/62a4388d-9dd1-d237-d798-4172d7abe2ad.png) | ![スクリーンショット 2020-09-28 22.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172991/ec2302a2-3dda-2883-d983-b544b299e797.png)

対応前のスクショの赤矢印のように、画面中央にあるSKViewの範囲を対応後のように画面全体に広げたかった。

# 解決方法

色々調べた割に、LaunchScreenFileを指定するだけという対応で呆気なく解決しました。。

元記事を表示

別画面に値を渡す方法について

# 画面遷移時に値を渡す

画面遷移時に遷移先の変数varに値を渡すことで、別の画面に値を渡すことができます。

“` Swift:ViewController
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: “second”) as! secondViewController
secondViewController. value = “value”
self.present(secondViewController, animated: true, completion: nil)
“`

“` Swift:secondViewController
class secondViewController: UIViewController {

var value = String()

override func viewDidLoad() {
super.viewDidLoad()
}
}
“`

#

元記事を表示

【Swift】UICollectionViewでInstagramのプロフィールっぽいUIをコードだけで実装してみた without storyboard

#はじめに

今回はUICollectionViewでInstagramのプロフィールっぽいUIをコードだけで実装してみる。
という内容です

この記事が誰かの役に立てば幸いです

ただただSwift初心者がUIを真似して作っただけなので、何かと至らない点があるかと思いますが、
コードの書き方、間違い等、お気づきのところあれば是非アドバイスくださると助かります!!

書き始めたの3ヶ月前、、ピエンパオンが止まりません

##完成形

![last_qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532395/abfe0c7a-483f-0f90-950b-5a6058c7c2f6.gif)

[めっちゃ起業家に憧れるインスタグラマー]

##対象読者

・ iOSアプリ開発初心者の方
・ UICollectionViewの使い方を知りたい方
・ StoryBoardを使用せずに開発してみたい方
・ InstagramのUIが好きな方

##開発環境

・ Version 11.3 (11C29

元記事を表示

【iOS】iOS14でcanOpenURLがfalseになる

## 検証環境

Xcode: 12.0.1
iOS: 14.0
Swift: 5

## 事象

下記のコードでブラウザを外部起動しようとしたら、canOpenURLメソッドがfalseになり、外部起動されなかった。

“` swift
guard let url: URL = URL(string: “https://www.yahoo.co.jp/”) else { return }
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
“`

コンソールを見ると下記のようなエラーメッセージが表示された。
httpsのURLスキームは許可されていないとのこと。

“`
-canOpenURL: failed for URL: “https://www.yahoo.co.jp/” – error: “This app is not allowed to query for scheme https”

元記事を表示

[機械学習]Create MLでObject Detectionを試してみた[物体検知]

# 今回実装してみたもの
![ダウンロード.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/a3d12b60-17fb-0583-2c2c-713acc019011.gif)

# 準備
今回は冒頭のGifの通りCoinを検知して識別するものを試してみました。
準備するものは
– データ(Jpeg写真)100枚程度
– [RecognizingObjectsInLiveCapture](https://developer.apple.com/documentation/vision/recognizing_objects_in_live_capture)
– [IBM Cloud Annotationsのアカウント(無料)](https://cloud.annotations.ai/login)
– 1円玉〜500円玉
以上です。

※Create MLはXcodeを右クリックでOpen Developer Toolにあるのでそこからmodelを作って下さい。

# 機械学習の大まかな種

元記事を表示

Install new IOS Version without upgrade xcode

https://github.com/filsv/iPhoneOSDeviceSupport
download the folder and copy to
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

“`
sudo rm -Rf ~/Library/*/*Xcode*
“`

元記事を表示

OTHERカテゴリの最新記事