iOS関連のことを調べてみた2022年10月07日

iOS関連のことを調べてみた2022年10月07日

Property WrapperとCodableを使ってJSON解析時のデータ型を変換する

### Property Wrapperとは
プロパティに対して制御を行う仕組み
[Swift Language Guide](https://docs.swift.org/swift-book/LanguageGuide/Properties.html)
### Codableとは
JSON形式を任意のデータ型に変換するプロトコル
[Appleのドキュメント](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)
### CodableとProperty Wrapperを連携して使う場面
例えばJSONではStringで定義されたが、実際アプリで使う際はIntになる場合など

Json File
“`json
{
“id”:”200″
“version”:”100″ //アプリ側は数値として使いたい
}
“`
Swift Code
“`swift
struct Hoge: Codable {
l

元記事を表示

【2022最新版】法人がiOSアプリをApp Storeに非表示アプリとしてリリースする方法

## はじめに
「iOSアプリのエンタープライズ配布がもう限界だ。非表示?非公開?Appってやつで配信したいので調べて。」と上司に言われてスタートしたApp Storeへのリリース作業。
これが思いのほか大変だったので、手順をまとめてみました。

## 対象者
この記事は下記のような人を対象にしています。

– 駆け出しエンジニア
– プログラミング初学者
– 初めてiOSアプリをリリースする方
– 非表示アプリに興味があるけど、リリース方法調べるのが面倒な方

## 結論
ゼロから始めたら1~2ヶ月はかかるから早めに着手しよう!

***
## **1. iOSアプリの配布方法**
まずはiOSアプリの配信方法について、おさらいします。
### a. AppStore公開App(app)
最も一般的な配布方法。AppStoreで公開されるアプリ。
### b. エンタープライズ([ADEP](https://developer.apple.com/jp/programs/enterprise/))
2020年ごろまで主流だった、従業員向けアプリの配布方法。【Swift】Storyboardを削除してXibで開発をする

# はじめに
Storyboardを使用して開発を進めるとStoryboardが肥大化していきます。
肥大化したStoryboardでコンフリクトが発生すると取り返しのつかないことになることは予想できます。
そのような事態を未然に防ぐためにviewごとにxibを作成して開発をします。
今回はそのやり方を記事にしておきます。

# Mainの削除
① Mainを右クリックします
② 「Delete」を押します
![スクリーンショット 2022-10-06 18.46.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dda5d094-a12b-6107-7fb4-94e6b83419c1.png)

「Move to Trash」を選択します。
![スクリーンショット 2022-10-06 18.48.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/cfeba53b-8ae2-b42b

【Xcode14】Storyboardを削除してコードベースで開発する

# はじめに
以前[Stroyboardを削除してコードのみで開発する方法](https://qiita.com/SNQ-2001/items/d680d8bb4a73106bdefb)の記事をあげましたが、Xcode14でやり方が変わっていたので紹介します。

# Storyboardを削除
「Main」を右クリックして「Delete」を選択
![スクリーンショット 2022-10-05 19.13.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ff81293e-a969-7760-4735-68e3be33a287.png)
Move to Trashを選択
![スクリーンショット 2022-05-17 0.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1e98c549-eb4c-fb73-41c2-910082437a58.png)

|Move to Trash|

Cookpad Summer Internship 2022 体験記

## はじめに
都内のスタートアップで一年ほど従事していました、学生iosエンジニアのにいまるです。

クックパッドのインターンが4ぬほど楽しかったので紹介しちゃいます
[Cookpad Summer Internship 2022](https://internship.cookpad.jp/)

## 応募したきっかけ
毎日の料理を楽しみにするという、クックパッドのサービス開発の思いや社風が好きで気になっていたからです。研究室の友人が就業型のインターンに参加をしていて、そのきっかけで自分も応募しました。

techブログでよく見かけるため技術力の高い会社という認識はあり、それなりに準備して選考に取り組みました。

## 選考
こわいので細かく言いませんが面白い技術テストと普通の面接でした〜

選考の中でも、社員さんは皆同じ志を持っていて、み

Flutter Mac iOSデバッグ時にシュミレーターでキーボードを表示&入力指定

普段実機でデバッグ作業をしていると、エディタの`iOSシュミレーター`で検証をお願いされた時、テキストフォーム入力時にあれ? シュミレーター上でキーボードが出ない。。。なんてことがあります。

しばらく使っていなかったせいか、`iOSシュミレーター`のデフォルトでは`Mac本体`のキーボードが指定されているので
# command + shift + K

を同時押しすることで切り替えて出現させることを忘れていました。

![スクリーンショット 2022-10-05 12.08.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/da86b0bc-4b20-4904-1a76-57974137d58b.png)
![スクリーンショット 2022-10-05 12.25.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/c430471c-e269-0e5e-6b40-713c472c195

【Swift】RxGestureでのスワイプ検知がまじ簡単

# はじめに
いまRxSwiftの勉強中でして、RxSwiftを使ってアプリを1個リリースするという目標を立てて頑張っています。
勉強中に出会ったRxGestureがめっちゃ便利だったので記録しておきます。

# スワイプの監視
### 上方向スワイプ
“`swift
view.rx
.swipeGesture(.up)
.when(.recognized)
.subscribe(onNext: { _ in
print(“上方向にスワイプしました”)
})
.disposed(by: disposeBag)
“`
### 下方向スワイプ
“`swift
view.rx
.swipeGesture(.down)
.when(.recognized)
.subscribe(onNext: { _ in
print(“下方向にスワイプしました”)
})
.disposed(by: disposeBag)
“`
### 右方向スワイプ
“`swift
view.rx

【Coremltools】PyTorchのモデルをCoreMLに変換する際にハマりまくった話

# 背景??

CoreMLとは、iPhoneやMac上で動く機械学習ライブラリです。
このライブラリが優れているのは、端末内で機械学習を行えるだけではなく、
TensorFlowやPytorchのモデルを変換してスマホに搭載することもできるんですね。

モデルの変換にはCoremltoolsというものを使います。[公式のサイト](https://coremltools.readme.io/docs)のチュートリアルを見れば、
変換するところまでは簡単です。しかし、今回、変換させたCoreMLが正しい分類結果を出してくれずに
数日間悩んだので、解決策を載せておきます。

ハマったのは以下の点です。
– 分類における確率が「1100%」とかとんでもない値になる
– PyTorchのモデルで分類したときの結果と一致しない
– 変換できたけれどSwiftUIでエラーが出て動かない

# PyTorchのモデル → CoreMLのモデル

[公式のサイトのPyTorch conversion](https://coremltools.readme.io/docs/p

【Swift】文字列を分割して配列にする

# はじめに
Pythonの`split`みたいなことをSwiftでしたいと思った時にやり方がわからなかったので記録しておきます。

# やりかた
### Pyhton
“`python
str = “1 2 3 4 5″

print(str.split(” “))

# [“1”, “2”, “3”, “4”, “5”]
“`

### Swift
“`swift
import Foundation

let str = “1 2 3 4 5″

print(str.components(separatedBy: ” “))

// [“1”, “2”, “3”, “4”, “5”]
“`

# おわり
似てるからごっちゃになる!

【Swift】Dateは扱いにくい!!

# はじめに
Dateは扱いにくい!!
こんなふうに使いたい!!!
“`swift
Date(string: “2022/05/10 12:00:00”)
“`

# 実装
“`swift
extension Date {
init(string: String, format: String = “yyyy/MM/dd HH:mm:ss”) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
dateFormatter.locale = Locale.current
dateFormatter.timeZone = TimeZone.current
dateFormatter.calendar = Calendar(identifier: .gregorian)
guard let date = dateFormatter.date(from: string) else {

【Xcode】プロジェクト名を変更する

# はじめに
あとからプロジェクト名を変更したくなることがあると思います。
プロジェクト名の変更の仕方と躓きポイントを紹介できたらと思います。

YubikiriMaster → Metronome

# やりかた

### プロジェクトをリイネームする
プロジェクト名をリネームモードにします。
![スクリーンショット 2022-10-01 20.28.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5dc05443-e8e5-7f7e-8a77-136c55006bd7.png)
`Metronome`にリネームします。
![スクリーンショット 2022-10-01 20.37.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5e24d1be-c266-3fe6-dd61-18d2c18d74b1.png)
「Rename」を押します。
![スクリーンショット 2022-10-0

日記アプリリリースしました!

## はじめに

この度、初めてのスマホアプリである「テンプレ日記」という日記アプリをリリースしたので紹介します!

「**テンプレ日記**」で検索すると一番上に出てくるので、興味を持った方は是非インストールして見てください!

## ios版

https://apps.apple.com/jp/app/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E6%97%A5%E8%A8%98/id1638009071

## Android版

https://play.google.com/store/apps/details?id=com.hayatosato.diary

## 「テンプレ日記」の特徴

早速ですが、今回リリースした「**テンプレ日記**」の特徴を紹介します。
「**テンプレ日記**」の特徴は以下の通りです。

1. テンプレート機能付き
1. csv&text形式でのダウンロード可能
1. csvファイルによってデータ引き継ぎを行うため、ios ⇄ Android間の移行もできる!
1. 完全無料(バナー広告のみ)
1. 最低限の機能しか

Firebase Firestore Flutterでの環境設定

`Firebase`のプロジェクトを作成したら、[Firebaseコンソール](https://console.firebase.google.com/?hl=ja)で`Cloud Firestore`に移動し、ワークフローに従って開始モードの選択(`テストモード`or`ロックモード`)→[ロケーションの設定](https://firebase.google.com/docs/firestore/locations?hl=ja#types)→`完了ボタン`の順に進めて頂いたら、

**1.**[FlutterとFirebaseの初期化と紐付け](https://qiita.com/ume-bar/items/fb5162b21d95e0c0bc42)
**2.プラグインのインストール**
“`
flutter pub add cloud_firestore
“`
**3.`flutter run`で再ビルド**
**4.`CocoaPods`が`1.9.1`以降にアップグレードされているか確認。**
“`
gem install cocoapods
“`
**5.**[パッケー

PWA(Progressive Web Apps)とは -Qiitaをスマホで快適に見る-

## QiitaをiPhoneで快適に見たい
1. でも公式アプリってないよね?
1. とりあえずホーム画面に追加するか…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/7832dae2-6e7d-f6df-bda1-1b16d05adb48.png)
1. で、生成されたこれを押す。
![S__70516744.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/5e1e897f-ecd6-4c39-1c3a-7f789015bf0b.jpeg)
1. するとSafariで開かれず、アドレスバーも何もないネイティブアプリのような画面で表示される。
![S__70516740.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882988/e34c7afe-9f89-c31f-965b-2214c7

AndroidエンジニアのためのiOSライブラリ選定シート

Qiita初投稿です!:joy:

## 目的
本ページはAndroidアプリ開発経験者がiOSアプリを開発し始める上で必ず確認したくなる~~はずの~~**Androidでいうとこのライブラリなんだけど、それのiOS版は何か**をまとめたものです。主に自分で調べた備忘録として残します。
誰かの労力の削減になれば幸いです:open_hands:

## 比較表(2022/9/30 時点)
| 役割 | Android(kotlin) | iOS(Swift) |
|:-:|:-:|:-:|
| ログ | [Timber](https://github.com/JakeWharton/timber) | [SwiftyBeaver](https://github.com/SwiftyBeaver/SwiftyBeaver) |
| HTTP クライアント | [Retrofit2](https://square.github.io/retrofit/) | [Moya](https://github.com/Moya/Moya)※1 |
| 画像読み込み | [coil](https://

【Swift】guard letについて改めて復習

## guard letの利点
– 早期リターン(さっさと処理を抜けたい時に使える)

## 使い方

サンプルコード1
定数(変数)のnilチェック

“` swift
let soga = nil

guard let soga = soga else {
// nilの場合はreturn
return
}
“`

サンプルコード2
定数(変数)のnilチェック(複数版)

“` swift
let soga1 = nil
let soga2 = nil

guard let soga1 = soga1,
let soga2 = soga2, else {
// soga1がnilの場合、soga2の判定をせずにreturn
return
}
“`

サンプルコード3
定数(変数)の値の比較

“` swift
let soga1 = nil
let soga2 = nil

guard soga1 == soga2 else {
// soga1とsoga2が同じでなければreturn
return
}
“`

Unity Google Sign-In iOSクラッシュ

# 環境
Unity2021.3.5
macOS 12.5 Montery
Xcode14

# 前提
Firebase Unity導入 [[firebase](https://firebase.google.com/download/unity?hl=ja)]、
googlesamples/google-signin-unity [[github](https://github.com/googlesamples/google-signin-unity/releases)]導入、
cocoapods導入、
pod対応 [[github](https://github.com/googlesamples/google-signin-unity/pull/126)] (ビルド出来ないとか v4だとUIWebView使ってるのでv5に変更とか)
Firebaseコンソールでの Authentication設定 [[console](https://console.firebase.google.com/)]
全て済んでいて ビルドして 一応Google認証が出来ている前提です。

# 問題

【SwiftUI】アクセシビリティ設定によってフォントサイズが変わってしまう

# はじめに
iPhoneの設定にアクセシビリティはとても優れており、様々な設定が存在します。
今回はそんなアクセシビリティに関する落とし穴について紹介できたらと思います。

# 問題点
このようなUIのアプリがあったとします。
![スクリーンショット 2022-09-29 18.19.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/410396f6-40a7-45ca-7cbe-39cc12484d66.png)

現在は信号の表示であることが容易にわかります。
しかし、アクセシビリティで文字の大きさを大きくしていた場合はどうなるでしょうか。

このような表示になってしまいます。
これでは信号であるという事がユーザーに伝わりません。
![スクリーンショット 2022-09-29 18.20.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/80475eba-5ee8-0ae4-34

SwiftUIにて画面の向きを固定、また画面回転の許可をコードにて制御する方法

## 画面を固定するのか、回転させるのか?

– 回転する画面に対応するのか?
– それとも画面は固定にするのか?

Xcodeの設定で画面を固定したりする記事はよく見かけるのですが、画面ごとに設定を変更したい時はコードで設定する必要がありましたので、コードで制御しました。

>ちなみに、どういう仕様だったかというと、普段の画面は縦型固定にして、Web表示する時だけ回転可能にしました。

:::note
UIKitだと記事が多いのですが、SwiftUIだと少ない気がしたので自分の備忘録的に書きました。
:::

## 開発環境
– Xcode:Version14.0
– Swift:Swift5
– 対応OS:iOS15.6

## まずAppDelegateにapplicationデリゲートを用意する

この時回転を許可するかどうかも最初に決めておきます。

“`swift:sampleApp.swift

class AppDelegate: NSObject, UIApplicationDelegate {
// 回転可能か設定する。外部から変更できるよう静的

UICollectionViewの行セル、ヘッダー、フッター、またはUITableView内でSwiftUIビューを使用(iOS 16, UIHostingConfiguration)

iOS 16では、UIKitのコレクションビュー(UICollectionView)やテーブルビュー(UITableView)の中で、行セル(cell)、ヘッダー、フッターにSwiftUIビューを使用することができます。

![swiftui-collectionview-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/2cc3d42b-6860-58c0-4076-1ea736b88f5e.png)

これは新しい `UIHostingConfiguration` を使用することで実現できます。

この記事では、UICollectionViewの行コンテンツ、ヘッダービュー、フッタービューとして、
またUITableViewの行コンテンツとしてSwiftUIビューを使うことについて説明します。

# `UICollectionView` と `UITableView` の違い

`UITableView` が簡単にテーブルを表示できるのに対し、 `UICollectionView` は