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

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

【Flutter】簡単なToDoアプリの作成手順

皆さんこんにちは!現役大学生のKamichan_R(@Kamichan_R)です。
今回は、世界中で多く利用されているクロスプラットフォーム開発のフレームワークであるFlutterでアプリ開発をしました。Flutterでアプリ開発をするためにDart,SQLiteを勉強しました。そして、学習のアウトプットとしてToDoアプリを制作しました。
この記事では、今回制作したToDoアプリの説明・開発手順と学習の振り返りを紹介します。

#アプリ制作の説明と経緯
ここでは、ToDoアプリの概要と使用した技術と学習の目的を説明します。
##アプリの概要
今回開発したアプリは基本的なToDoアプリの機能が実装されています。タスクの追加・読取・編集・削除(CRUD)の機能があります。タスク作成時は、タスク名・優先度・期限・メモを入力します。複数のタスクがある場合は期日が早い順に並べるという機能があります。

Frameworkとは

iOSDC2021の[Daiki Matsudate](https://twitter.com/d_date)さんの発表を聞いて今までなんとなく理解していたFrameworkのことがXCFrameworkとSPMとの関連を含めかなり理解が進んだのでその復習がてら知識の整理をしようと思います。この発表ではMulti ModulesやMulti Projectsについても非常に素晴らしい内容が含まれていますがここではFrameworkのみにフォーカスしてまとめようと思います。

## Frameworkとは
* Build TargetとLinkする実行可能なバイナリ
* FrameworkはBuild Targetに設定することができる
* Linkの仕方には2種類ある

### Static Link
* **ビルド時**にObject Code(.oファイル)をひとつのFrameworkにまとめアプリとLinkしひとつのバイナリにまとめる
* よって起動時間は**短く**なる
* このLink方法のFrameworkを**Static Framework**という

### Dyna

元記事を表示

Web APIのリクエスト仕様を型で表現したい。Alamofire編 2021秋

# はじめに

Web APIをアプリから利用する場合、そのAPIリクエストの仕様をSwiftで型として扱いたい場合があります。それでAPI仕様書と照らし合わせてミスがないか、齟齬がないかを確認したりトラブル時のきりわけをしたかったりするわけです(私は)。そういう場合の型の定義について[Alamofire](https://github.com/Alamofire/Alamofire)を利用してどうやるかを書いておきます。他に良いやり方があるかもしれないのでそういう場合はコメントをもらえれば助かります。

具体的には何らかのWebAPIリクエストをつぎのようにできるのが良いんじゃないかという話です。

“`swift
// MARK: – リクエスト型の定義側
struct 何らかのWebAPIリクエスト: WebAPIRequest { // protocol WebAPIRequest: URLRequestConvertible { … }
typealias Response = User // struct User: Decodable { … }

元記事を表示

[QUIC]iOS15でNetwork.frameworkにNWProtocolQUICが来たのでquic-goと双方向ストリーム

# iOS15でNetwork.frameworkにNWProtocolQUICが来たのでquic-goと双方向ストリームしてみた

* iOS15 から iOS が QUIC が諸々使えるようになりました???????
* WWDC2021 での発表はこちら

https://developer.apple.com/videos/play/wwdc2021/10094

* この中で紹介されているのですが、URLSession が http3 をサポートするので、http リクエストは複雑な事をしなくても QUIC が使えそうです
* また、Network.framework に NWProtocolQUIC が新しく入っており、ほかの TCP や UDP のソケットと同じインタフェースで QUIC のストリームを扱えるようになったようです

https://developer.apple.com/documentation/network/nwprotocolquic

* そこで、今回は **NWProtocolQUIC を使って、quic-go で建てたサーバと双方向ストリーム

元記事を表示

【iOS】Metal Best Practicesの解説(11)コマンドバッファ

[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

### [Command Buffers (コマンドバッファ)](https://developer

元記事を表示

画素値の配列からCGImageを作る

 画素値の配列からCGImageを作成する方法として、[CGImageクラスのイニシャライザを使う方法](https://developer.apple.com/documentation/coregraphics/cgimage/1455149-init) がありますが、ここではAccelerateフレームワークを利用した方法を紹介します。
 Accelerateフレームワークを利用することで、次の効果が期待できます。

– CPUのベクトル演算機能の活用で高速・省エネな変換
– 画像の上下・左右反転やサイズ変更等の加工を高速・簡単に実現

ここでは10×4の画素値配列をCGImageに変換/加工してみます。
**※iOS13以降を前提としてます。**

## 配列からCGImageへの変換

### グレースケールの場合

“`swift
let width = 10
let height = 4

// グレースケール画素値
var grayScalePixels: [UInt8] = [
0, 25, 50, 75,100,125,150,175,200,225,

元記事を表示

【Swift】ScrollView + AutoLayout (SnapKit) での実装メモ

# はじめに
よくあるような縦方向・横方向の ScrollView の実装方法のメモ。
以下のような画面を実装します。
よければ参考にしてください。

![Simulator Screen Recording – iPhone SE (2nd generation) – 2021-09-26 at 01.08.56.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1203765/e3bc7452-c9e8-ae1a-acf8-6c30e25a86d5.gif)

【注意】
※ Viewはコードベースで作成しています。
※ レイアウトには [SnapKit](https://github.com/SnapKit/SnapKit) を使用しています。

# 環境
– Swift5
– Xcode13.0

# 実装手順
順番に実装手順を記載していきます。
ここでは、色々省略して、最低限のコードのみ記載しています。
細かいことは、記事の最後に全体のコードを載せておりますので、そちらをご参照ください。

元記事を表示

[Swift]四角く線が進んでいくアニメーション

#はじめに
こんな感じのやつを作ります。

#サンプル
![AnyConv.com__四角形のタイマー.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691930/2e21dac1-3db5-6798-ee41-2262dec5b260.gif)

#コード
とりあえずこれをそのままぺッと貼り付けて、シュミレータで確認してみてください!
上のアニメーションと同じものができるはずです。

“`
class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// グレーの線を作る
let backLayer = CAShapeLayer()
backLayer.path = CGPath(rect: CGRect(x: 100, y: 300, width: 200, height: 200), transfo

元記事を表示

Flutter環境構築のつまずきポイント(初心者向け)

#目次
– [はじめに](#はじめに)
– [環境](#環境)
– [PATHが通らない](#pathが通らない)
– [Android StudioでOpen iOS Simulatorが出来ない](#android-studioでopen-ios-simulatorが出来ない)
– [さいごに](#さいごに)
– [参考](#参考)

#はじめに
Flutterの勉強を始めたいと思い、まずは環境構築をしてみました。基本的には手順通り進みましたが、Flutter初心者の私が引っ掛かったいくつかのポイントをまとめました。Flutter環境構築が上手くいかない方は是非参考にしてみてください。

#環境
– macOS Catalina 10.15.7

#PATHが通らない
flutterをダウンロードして所定の場所に配置して、.zshrcファイルにPATHを追加して保存しましたが、not foundエラーとなってしまいました。

[解決策] source .zshrcを実行してzshrcファイルの変更を反映させると解決しました。つい忘れがちですが、忘れない様にしたいですね。
[【zsh

元記事を表示

【RxSwift】RxSwift Traitsを知る

#はじめに
今回は、Single, Completable, Maybeについてまとめます。いわゆる、RxSwift Traitsと呼ばれるものですね。

#Single
Singleは値またはエラーのいずれか一方を返す(流す)ことが保証されているObservableのようなものです。
使う場面の例としては、
・APIから値を要求し、取得する
・DBから値を取得する
・画像が読み込まれたときに、操作する
などなど

“`swift
func readAll() -> Single<[Record]> {
return Single.create { observer in
if isSuccess {
observer(.success(records))
} else {
observer(.failure(error))
}
}
return .just(dataStore.readAll())
}
“`

さらに、純粋なObservableは`.asSing

元記事を表示

SwiftUIでハーフモーダルを表示するライブラリ ResizableSheet

最近、ハーフモーダル(セミモーダル)を使っているアプリが増えてきましたね。
僕も個人開発しているアプリでハーフモーダルを使いたい時がよくあるのですが、SwiftUIで手軽に実装する方法がなかったので、 [ResizableSheet](https://github.com/mtj0928/ResizableSheet) というライブラリを作りました。
この記事では、ハーフモーダルの実装とその煩雑さ、そして開発したライブラリであるResizableSheetの紹介をします。

(最初の方はハーフモーダルの話をするので、ResizableSheetについて早く知りたい人は [後半](https://qiita.com/matsuji/items/1c4ff827d73b330c2c55#resizablesheet)から読んでください。笑)

# ハーフモーダルとは
iOS標準のマップアプリなどで使われている下から出てくるシートです。
iPhone買い替え時にやること

iPhoneを買い替えるたびにやる作業なのでまとめておきます。

**前提**
iCloud の有料プランを使っています
(クイックスタートを使い新旧 iPhone で直接データ移行をすれば iCloud の有料プランに入っていなくても大丈夫だと思いますが念のため)


# データ移行前にやっておくこと

## iCloud の設定調整

**iCloud の「iPhoneを探す」を OFF にする**
設定/Apple ID/iCloud/ から「iPhoneを探す」を OFF にする

**iCloud の共有設定が ON になっていることを確認**
全てのアプリ(「iPhoneを探す」以外)がONになっていることを確認する
(こう見るとiCloud対応しているアプリは案外少ないな)

## 不要なアプリの削除
データ移行が早く終わるように不要なアプリやデータは削除しておく
(個人的には、写真アプリのデータ容量が多いので「iCoud写真」共有をオフにして、データ移行の容量を減らしたいが、ここではそのままONにしている)

## 設定の見直し
設定/一般/iPhoneストレー

元記事を表示

iOS15でUITextViewにテキストをドラッグ&ドロップでクラッシュすることがある

原因が明確には分かっていないのですが、検証した結果をまとめます。
もし原因が特定できたとか、Appleのドキュメントで関連するものがあればぜひコメントで教えてください!

# 事象
![crash.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84917/5a59c89d-38d7-222d-1555-d87f290914c7.gif)

## 環境
iOS: 15β8、15RC、15.0
Xcode: 12.0, 12.1, 13.0beta, 13.0
上記iOSとXcodeの全ての組み合わせでクラッシュすることを確認

## 手順
UITextViewにテキストをドラッグ&ドロップする

## 再現コード
自分が確認した限り、クラッシュは2つのパターンで発生した。

“`swift
class ViewController: UIViewController {

@IBOutlet weak var textView: UITextView!

override fun

元記事を表示

Flutter/複数ファイルのダウンロードの進捗をリアルタイムで表示

#複数ファイルのダウンロードの進捗をリアルタイムで表示する
今回は動画ファイルをダウンロードしていきます。
色々ググっても複数ファイルのダウンロード進捗をリアルタイムで更新する実装を見かけなかったので、僕なりに実装したものを晒します。
ダウンロード中にアプリをキルしてしまった場合、前回のダウンロードが完了したファイルについては飛ばしてダウンロードされるように実装しています。

※殴り書きなので、ディレクトリ構造や状態管理はほとんど考慮していません
※とりあえず動くものを!をモットーにやってます。汚いコーディングだと思います。読みにくければすみません。。。

[Githubのレポジトリーはこちら](https://github.com/489yuki/download_sample)

##1.使用パッケージの導入

https://pub.dev/packages/path_provider

https://pub.dev/packages/http

https://pub.dev/packages/rxdart

pubspec.yamlに以下を追記(バージョンは最新のものを使

元記事を表示

【Swift】StringをdropFirstできなかった時の解決策

Swiftで文字列の最初の文字を削除したかったので、以下の処理を書いたがdropFirstが反映されない。

“`swift
str = str.dropFirst()
str = str.dropFirst(1)
str = str.dropFirst(2)
“`

3行ともdropFirstが反映されない。

エラー文はこんな感じ。

`No ‘dropFirst’ candidates produce the expected contextual result type ‘String’`

~~ちなみにこの辺りの記事でもString型にdropFirstは適用されているが、自分の場合はなぜか反映されず。~~
コメントでご指摘いただいたようにdropFirstはSubstringにしか適用されないようです。

https://qiita.com/masakihori/items/889cb5496f53cfff5b43

【Swift5】文字列操作(String型)チートシート〜置換,結合,削除,比較,取得〜

## 解決策

“`swift
str = String(str.dr

元記事を表示

【Swift】Character型の配列をString型の配列にキャスト

## ぶつかった課題

文字列を1文字ずつの配列にする方法として以下の手段がある。

“`swift
let a = “abcde”
let array = Array(a)
“`

ただここで生成される配列は1文字の型の意味を持つCharacter型。

そのためarrayをappendしようとすると

“`
Cannot convert value of type ‘[String.Element]’ (aka ‘Array‘) to expected argument type ‘[String]’
“`
とエラーになってしまう。

そのためarrayの中身のCharacter型をString型に直す必要がある。

## 解決策

map関数を使って、配列全体に処理を与えれば良いだけだった。

“`swift
let new_array = array.map{String($0)}
“`

型変換を克服できずに数日悩んでいたので解決して何より。

## 参考文献

CharacterからIntに変更している記事でした。

https://qi

元記事を表示

XCodeでNo such module ‘XXXXX’に詰まった時の対処法

・XCodeで既にpodまわりの再インストールなどを試した。
・しかし、どの手法を試しても同じエラーが出続けてビルドできない。
・各種ライブラリのインストールは確認済み
自分の場合はFirebase関連モジュールのエラーが沢山出て、てっきりFirebaseモジュールの原因?と勘違いしたが、バージョン情報をググっても特段エラーの報告は見つけられない。

# TL;DR

プロジェクトを開くときに間違ってxcodeprojを開いていたのが原因でした。

“`:ダメな例
open bar.xcodeproj
“`

開くプロジェクトの名前をしっかり確認しましょう。

“`:正しい例
open bar.xcworkspace
“`

灯台下暗しですね。。。

元記事を表示

Flutterでの開発でAPIKeyを隠してGithubにあげる方法

チーム開発をするときなどに、自分のコードをGithubなどにあげたい!→でもAPIKeyを隠さないと…というときがあると思います。そうした時に、これが最も手っ取り早くAPIKeyを隠す方法だと思ったので共有します。
※私が作っていたアプリが地図系なので、APIKeyの名前もそんな感じになってますが、お構いなく好きに名前つけてもらって大丈夫です()
#Android
##基本的な設定
https://www.entwicklernotizen.de/blog/how-to-handle-secret-api-keys-in-flutter-for-android-and-i-os/
“`android/app/src/main/AndroidManifest.xml“`へのAPIKeyの書き込みについてはこれを参考にしてください。ここから先のコードは、“`your_api_key“`という文字列を自分のAPIKeyに書き換えて使用してください。

“`dart:android/local.properties

MAPS_API_KEY=your_api_key//こ

元記事を表示

Swift – Xibを利用してTableViewとカスタマイズcellを作成する

#はじめに
恐らくtableviewなら、普通のやり方だけでいけるのに、
どうしてわざわざ手間をかけてxibを使うの?
どんなタイミングで使うの?と思う方がいると思います。

シンプルな画面なら普通のやり方で大丈夫だと思いますが、
同じController画面に複数の複雑なメイン画面がある時、このように各画面をパーツ化し、それぞれ組み立てた方がわかりやすくて今後の保守性、拡張性に優しいかもしれませんので、ご参考を!
#手順
– Xibファイルを作成する
– Xib画面にUITableViewを追加する
– カスタマイズclassのファイルを作成する
– cell用のxibファイル、swiftファイルを作成する
– controller画面のUIViewのclassを定義したclassと設定する
– viewDidLoadでcellをtableviewに登録する処理を入れる

各ステップに細かい手間があって抜けてはいけないので、以下説明いたします。

#Xibファイルを作成する
File -> New -> File…でXibファイルを作成する
![截圖 2021-09-23 19.

元記事を表示

OTHERカテゴリの最新記事