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

iOS関連のことを調べてみた2021年10月13日
目次

Flutterチュートリアル Todoアプリを作ろう! ~環境構築~

# この記事を書こうと思った理由
 この記事を書く前はFlutterでMarkdownで書けるメモアプリを作成していました。そのアプリの制作が終わったので、ここらへんで一旦自分のFlutterの知識をアウトプットしようと思いこの記事を書きました。

## デバック環境
– Windows 10
– Android 30

## Flutter環境構築
1. FlutterSDKのダウンロード
 [FlutterSDKのダウンロードリンク](https://flutter.dev/docs/get-started/install)
ここからSDKをダウンロードしCドライブ直下などに展開してください。

2. Flutter SDKのパス通し
 SDKの展開したフォルダ・ディレクトリの名前が「flutter」になってると思います。その中の「bin」のファルダのパスを通してください。

3. Android Studioのインストール
 [Android Studioのダウンロードリンク](https://developer.android.com/studio)
ここからインストーラーをダ

元記事を表示

iOS15でAppTrackingTransparency許可ポップアップが表示されなくなる問題解決法

公式フォーラムにて解決方法が提示されておりました
https://developer.apple.com/forums/thread/690762

## 要約すると
AppDelegateクラス内のapplicationDidBecomeActiveメソッド内にてポップアップ処理を記述、とのこと

## その他・雑談
iOS15でポップアップされなくなり審査リジェクトされた方が世界中でいる様子でした
※世界中で困ってた頃のフォーラムは以下でした
https://developer.apple.com/forums/thread/690607

アプリ審査リジェクトされると以下のようなメッセージが来ます(参考までに)

“`
Guideline 2.1 – Information Needed

We’re looking forward to completing our review, but we need more information to continue. Your app uses the AppTrackingTransparency framework, but

元記事を表示

Xcode13 iOS15でアプリアイコンが表示されないバグについて

#はじめに
Xcode13・iOS15にアップデートしてから、アプリをXcodeでビルドしてインストールしてもアプリアイコンが反映されなかったので、一時的な方法ではありますが解決方法を残しておきたいと思います。
#解決方法
シュミレーターでビルドした場合はインストールしたアプリを一度削除(アプリのアイコンを長押で消せます)してからもう一度ビルドすると反映されます。
実機転送でビルドした場合は、アプリインストール後に端末を再起動すると反映されます。
その他のアプリアイコンの作成などはいつも通りに行っていただいて問題ないと思われます。

iPhoneのバージョンが最新ではない場合はiOS15.0.1からiOS15.0.2にアップデートしてからビルドすると通常通りアプリアイコンの反映がされました。
おそらくiOS15.0.1のバグだったと思われるので、アイコンの反映がされていない場合はまずバージョンが最新か確認をしてから行うと大丈夫そうです。
#最後に
簡単な解決方法でしたが、この方法に行き当たるまで30分ほどしどろもどろしたので、同じ問題で悩んでいる方々のお役に立てると嬉しいです。
#参考

元記事を表示

【就活】iOSエンジニア志望の面接で聞かれたことまとめ

#はじめに
面接で聞かれたことをまとめていきます。iOSに限らず、エンジニア志望の方に役に立てばいいなと思っています。
具体的な社名などは伏せますし、面接日時や合否は書きません。

#「技術」系

#「将来」系

#「チーム開発」系

元記事を表示

【iOS】続・半強制アップデートの仕組みをカジュアルに実装する

# はじめに

ユーザの端末にインストールされているアプリのバージョンが古いままだと、最新機能やバグ修正が提供できないだけでなく、メンテナンスが難しくなっていきます。ユーザには常に最新バージョンを使ってもらうのが望ましく、アップデートを促す仕組みは積極的に取り入れた方が良いと考えています。

アプリを起動したとき、最新バージョンがApp Storeにリリースされていることをユーザに伝え、アップデートを促す仕組みをこの記事では**半強制アップデート**と呼びます。

以前、「[【iOS】半強制アップデートの仕組みをカジュアルに実装する](https://qiita.com/hituziando/items/fc2ad0642ccdb1258840)」という記事でiTunes Search APIを利用した半強制アップデートの実装を紹介しました。このソースコードは僕が開発しているいくつものアプリに導入されており、これだけ流用するのならばフレームワーク化して一元管理した方が楽になってきます。
ということで、**アプリの最新バージョンがApp Storeにリリースされたらアップデートを促す機能

元記事を表示

iOSアプリ開発のための外部ライブラリのリンクの種類や配布/利用方法

# はじめに

[iOSアプリ開発用パッケージマネージャーごとのStatic/Dynamicリンク設定とカスタマイズおよび各種調査方法](https://qiita.com/yimajo/items/a2736191f402060707c1)について整理したのですが、スタティックとかダイナミックリンクってなんなのよ、ということもあるので、その前提知識としてiOSアプリ開発のための外部ライブラリのリンクの種類や配布/利用方法についても整理しておきます。

この記事では大きく分けて下記の2つのことを説明します

– 外部ライブラリのリンク種類
– スタティックリンク
– ダイナミックリンク
– 外部ライブラリの配布/利用方法
– Library
– Framework
– XCFramework

そしてこれは例えば、”スタティックリンクのFramework”や”ダイナミックリンクのFramwork”の組み合わせが存在するということです。

用語としてややこしいのは外部ライブラリの配布方法にLibraryとFrameworkがあることです。この記事で

元記事を表示

iOSアプリ開発用パッケージマネージャーごとのStatic/Dynamicリンク設定とカスタマイズおよび各種調査方法

# はじめに

iOSアプリ開発のためのパッケージマネージャー別のリンク指定を整理しておきます。

勘違いしやすいポイントとしては、Carthageを使ってもデフォルトでdynamicリンクなのでstaticリンクするよりもアプリ起動は遅くなります。つまりCarthageを使って事前にビルドしておくことで都度のビルド時間を短縮しても、何もしないとアプリ起動が遅くなるわけです。その他、ちょっとややこしい話ですが、CocoaPodsでは`use_frameworks!`にするとdynamicリンクなフレームワークになりますが、これはstaticリンクにすることもできます。

この記事では、自分のアプリでどのように設定するかのプラクティスではなく、それぞれのパッケージマネージャーのデフォルトがどうなっていて、設定でそれを変える方法とビルドされたライブラリ/フレームワークが本当に意図通りになってるか確認する方法について書いておきます。

StaticやDynamicとはなにかということについては[iOSアプリ開発のための外部ライブラリのリンクの種類や配布/利用方法](https://qiita

元記事を表示

【iOS】Metal Best Practicesの解説(14)パイプライン

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Pipelines (パイプライン)](https://developer.apple.c

元記事を表示

【iOS】Metal Best Practicesの解説(13)関数とライブラリ

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Functions and Libraries (関数とライブラリ)](https://d

元記事を表示

【iOS】Metal Best Practicesの解説(12)間接バッファ

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Indirect Buffers (間接バッファ)](https://developer.

元記事を表示

[Swift] 複数の ビルドTARGET へ Swift Package Manager でライブラリを入れる

# [Swift] Swift Package Managerでライブラリを入れる

複数のビルドTARGETにライブラリを入れる際のメモ

## 1、swift packagesからライブラリを入れる。

[iOSアプリ開発にSwift Package Managerを使おう](https://qiita.com/hironytic/items/09a4c16857b409c17d2c)

今回は[QGrid](https://github.com/Q-Mobile/QGrid)をプロジェクトへ導入する。

(1) File → Swift packages → add package dependency
(2) プロジェクトへ導入したいライブラリのgit url (https://github.com/Q-Mobile/QGrid) を入れる

![スクリーンショット 2021-10-08 22.26.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1322570/3c70e8fb-a51a-

元記事を表示

DST Root CA X3 has expired 対策

#※注意書き※ 暫定記事です。
#DST Root CA X3 の期限切れ
Let’sencrypt ユーザの皆さんなら、よくご存知でしょうが、 CA証明書、2021/09/30 に期限が切れてしまったことで様々な影響があると伝えられてきました。明確に「対応がないもの」というのが古いOSであったりするのですが、証明書のコンパチビリティ で示されているような古いOSに限らず 例えば、Windows10あたりでも、自動で入れ替えられたりはしないまま古い証明書が「無効なまま」参照され、VPNなどでは弾かれて(13801エラー)しまいます。

筆者はStrongSwanのKEv2/VPNサービスで「認証エラー」となるため、数時間潰されてしまいました。(証明書が無効ですとエラーが出ればいいのに)

Webブラウザ中でなら昔から手慣れたインターフェイスで管理できるのですが、OSはそうでもないことが多いのです。

#何をすれば良いのか
接続先サーバの、FQDNに

元記事を表示

[SwiftUI] 変数の値をNavigationLinkのdestinationに指定して画面遷移できるようにしたい。

## 概要
使いまわせるviewは、できるだけ細かく作って、車輪の再開発だけは避けたい!!!
と思い、List用のcellのviewを作成。
しかし、cellにあるNavigationLinkのdestinationプロパティの値で怒られ、ハマる。。。

## Cannot find type ‘Destination’ in scopeで怒られ、引数に遷移したいviewを渡せない。。。
![スクリーンショット 2021-10-08 21.55.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1322570/4a7f8885-c557-2176-73ac-3335e08b3016.png)

“`swift
struct NavigationLinkView: View {

var body: some View {
VStack(spacing: 30) {
NavigationLinkCell(title: “home”, desti

元記事を表示

【Swift】URLはStringからデコードできる

偶然気づいたのですが、JSONをデコードする際にURLは直接Stringからデコードできるみたいです。

例えばこういうJSONがあったとします。

“`
let jsonString = “””
{
“url”: “https://example.com/”,
}
“””
“`

この時に作成するモデルは

“`swift
struct Example: Decodable {
let url: URL
}
“`

と書く事ができます。`let url: String`としなくても良いという事です。

試しにデコードしてみます。

“`swift
let example = try JSONDecoder().decode(Example.self, from: jsonString.data(using: .utf8)!)

// Example(url: https://example.com/)
print(example)
// URL
print(type(of: example.url))
“`

どうやらちゃんとURL型にデコードされているみ

元記事を表示

Dependency Injection

“`swift:Original.swift
class User {
}

class ApiManager {
static let shared = ApiManager()

private init() {}

func getUsers(completion: @escaping (Result<[User], Error>) -> Void) {
let user = User()
/* Do task which takes time such as get users over internet. */
completion(.success([user]))
}
}

class Client {
func execute() {
let api = ApiManager.shared
api.getUsers { result in
/* do something */
}
}
}

class

元記事を表示

APIを利用するModelクラスをテストする

##前提
ここでは私自身の備忘録として本記事の執筆に至っています。
仔細な間違い等ございましたらご指摘いただけますと幸いです。

##実装すること
今回はXCTestを用いて実際のAPIを叩きそれに対するテストコードを実装してみたいと思います。
実装する内容としてはユーザー名を用いGithubのレポジトリからスター数を5以上のものを返すModelクラスをテストしてみたいと思います。

##各クラスのロール

|     クラス | ロール             |
|:———–|————:|
| GitHubRepository | GitHubレポジトリを表現するEntityクラス |
| GitHubAPIClient | GitHubのAPIを叩いてデータを取得するAPIクライアント |
| GitHubRepositoryManager | 指定したユーザー名のレポジトリ一覧を取得するModelクラス |

##実際のコード

“`swift:GitHubRepository
// GitHubリポジトリを表現するEntityクラス

st

元記事を表示

Swift – #colorLiteral使ってカスタマイズのUIColorを定義

#はじめに
UI部品に色を指定したい場合、↓のようにstoryboardでいじる以外、
![截圖 2021-10-07 22.10.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/7a3cd733-d929-7a28-1faa-5739c1bfd2db.png)
コードで指定することもできます。例えば、

“`サンプル.swift
self.view.backgroundColor = UIColor.black
“`
`.black`黒色は内蔵の色なので、`UIColor.`を入力して、自動的にリストが出てくると思います。↓の感じ
![截圖 2021-10-07 21.32.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/15d97c1c-2127-d126-6608-9f84127bfa6a.png)

でも、もし欲しい色は内蔵にない場合はどうすればいいですか?storyb

元記事を表示

Carthageで入っている各ライブラリのSwiftバージョンを洗い出すシェル芸

ABI Stability & Module Stability 対応しているライブラリはSwiftのバージョンを上げて `carthage bootstrap –cache-builds` してもキャッシュが効いてビルドが走らないが、その関係で複数のSwiftバージョンでビルドされたライブラリが混在する結果になる。

そこで、各ライブラリがどのバージョンでビルドされているのかが知りたくてシェルを書いた。

“`sh
$ find Carthage/Build -name “*.version” -exec /usr/local/bin/jq ‘.iOS[] | [.name, .swiftToolchainVersion] | join(“: “)’ {} \; | cat | uniq | sed -r ‘s/\”//g’
“`

“`sh:result(例、一部抜粋)
KeychainAccess: 5.4.2 (swiftlang-1205.0.28.2 clang-1205.0.19.57)
SVProgressHUD:
OHHTTPStubs: 5.5 (swif

元記事を表示

[Unity] iOS NativePluginの実装の仕方

# はじめに
Androidに引き続き、iOS側でもNativePluginの作成方法をまとめました。
ここでは、UnityでiOSのNativeアラートを表示させるまでの忘却録です。

Unity向けのiOS Pluginは作り方は人によって違うと思いますが、
今回は『UnityのiOSビルド結果であるXcodeプロジェクト上からコードを編集しました。』
もっと効率の良いやり方があればご教授下さい><; Android版↓ https://qiita.com/atsutama/items/28744b1a29e79184c3fc ## 準備 macOS Catalina: 10.15.7 Unity 2018.4.19f Xcode12.4 Swift4.0 ## UnityとiOS Pluginの構成 Unityから書き出されるiOS関連のファイルはObjective-CベースなのでSwiftを呼び出す設定が必要です。 SwiftからObjective-Cのクラスに呼ぶには、宣言されてるヘッダーファイルを特定のヘッダーファイルでimportして使用します。 今回は`Obje

元記事を表示

【Swift】HTTP通信時のコネクションの再利用

## 概要

URLSessionオブジェクトを再利用することによる通信処理の効率化について記載します。

[Androidについてはこちら](https://qiita.com/cwan/items/391557a9edc4524cd685)

## 障害事象

弊社が開発しているiOSアプリのデータ転送量が多すぎるのではないかという報告を受けました。データ転送量を測定してみると、HTTPリクエスト・レスポンスのヘッダーおよびボディサイズの合計の2.5倍程度の量が発生していました。

※このアプリの外部への通信はすべて[Swift標準のHTTPRequest](https://developer.apple.com/documentation/foundation/urlrequest)を使用して実装されています。

## 調査方法

XCodeのDebug Navigatorで通信状況を調べてみることにしました。

1. シミュレーターでアプリを起動
1. ツールバー > [View] > [Navigators] > [Debug] を選択
1. [Network] をクリック

元記事を表示

OTHERカテゴリの最新記事