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

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

[Swift]修飾子のLazyとは?

#はじめに
最近はコードでUIを作るのにハマっています。その中で、Lazyが必要な場面が出てきたので備忘録的にまとめておきます。

#どんなときに使えるの?
結論、一つの用法として、コードでUIを作っていくときなどに使えることがあります。
例えば、UIButtonであれば以下のコードのように書けます。
このコードは”Lazy”を付けなくても問題なくUIButtonを生成することができます。

“`
let button: UIButton = {
let button = UIButton()
button.setTitle(“tap”, for: .normal)
button.backgroundColor = .blue
return button
}()
“`
では、いつ”Lazy”が必要になるのか、それはCollectionViewやTableViewでdelegate、dataSourceをselfに設定するときです。
“Lazy”をつけることで、delegateやdataSourceにselfを

元記事を表示

iPhone13を発表したAppleEventメモ

本日(2021/09/15)の Apple Event(iPhone13発表)のメモになります。

https://www.apple.com/jp/apple-events/september-2021/


# Apple TV+
Apple TV+ でのコンテンツ紹介

# iPad(第9世代)
iPadOS15搭載
A13Bionic
CPUやカメラがアップグレード
**センターフレームに対応(今回発表した全機種)**
329ドル(64GB)から
色はシルバーとグレイ
**本日受付開始**
**販売は来週**

# iPad mini(第6世代)
色:パープル、ピンク、スターライト、スペースグレイ
画面は8.3インチに拡大
**Touch IDが画面上部の電源ボタンに移動**
物理的なホームボタンは廃止
コネクタはUSB-C
カメラやオーディオもアップグレード
4K, 12MP, センターフレームに対応
横向きでのスピーカーに対応
Apple Pencilにも対応
**本日受付開始**
**販売は来週**
全てのラインナップで100%再生アルミニウムの筐体を使用

#

元記事を表示

Flutterで手書きを実装する

# 実装する機能

今回実装する機能は、

– 自由に画面をなぞると特定の範囲内で手書きで絵が描けるようにする
– ひとつ戻る(undo)ひとつ進む(redo)ボタンの実装
– 全部消すボタンの実装

になります。類似した機能が入ったアプリだと消しゴムが入っていますが、今回のアプリではそこまで必要性を感じなかったため実装しません。

# パッケージ・バージョン

Flutterのバージョンは`2.2.0`です。

使用するパッケージは状態管理のために`hooks_riverpod`と`statenotifier`、`freezed`を使います。
特にそれ以外のパッケージは使用しません。
バージョンは以下の通りです。

“`yaml:pubspec.yaml
dependencies:
flutter_hooks: ^0.17.0
freezed_annotation:
hooks_riverpod: ^0.14.0+4

dev_dependencies:
build_runner:
freezed:
“`

# 手書きの実装

## 土台の作成

本題の実装に

元記事を表示

FlutterがiOSシミュレータを認識しなかった話

## 前置き

経緯の説明から。

XCodeをApp Storeから入れていたのですが、容量が大きすぎるので一度削除しました。代わりにApple Developerサイトからコマンドラインツールをダウンロードして入れたのですが、今度はシミュレータを入れれず。

色々試したあと、入れてからシミュレータを厳選する作戦を思いつき、Apple DeveloperからXCodeをダウンロードしました。

## 症状

XCodeを入れているのに、iOSシミュレータを認識しませんでした。シミュレータを起動して

“`
Flutter devices
“`

と入力しても、デバイスが出てきません。そこで調べていると、以下を見つけました。

https://stackoverflow.com/questions/64944483/flutter-doctor-xcode-installation-is-incomplete

## 手順

XCodeを開く

メニューバー > Xcode > Preferance > Location > Command Line Toolsが空白になっていたら

元記事を表示

【Swift】Int型 ⇄ 16進数文字列 ⇄ バイト配列(UInt8配列) を相互変換する

# はじめに
BLE通信などを実装していると、Write / Read のタイミングでバイト型を扱うと思います。
業務でファームウェアの仕様に合わせ、Int型 ⇄ 16進数文字列 ⇄ バイト配列 で相互変換する必要がありました。
ここら辺は忘れやすいかなと思い、まとめることにしました!

# 環境
– Xcode12.5
– Swift5

# 変換していく
今回は、以下のデータを変換していきます。

| Int型 | 16進数文字列 | バイト配列(UInt8配列) |
| :—: | :—: | :—: |
| 123456789 | “075BCD15” | [7, 91, 205, 21] |

### 16進数文字列 -> Byte配列
ごりごり加工していくので、別途 extension に関数を定義しています。

“`swift
extension String {
func toBytes() -> [UInt8]? {

var hexString = self

if hexSt

元記事を表示

iOS 開発の頑張らないビルド用 Swift CLI ツール管理

## TL;DR

どうせ macOS 上でしか開発できないので、 直接ビルドツールの実行バイナリをダウンロードして利用する。

## モチベーション

– XcodeGen
– SwiftLint
– LicensePlist

といった最終成果物には含まれないが、ビルドプロセスで利用する Swift 製 CLI ツールの管理について、 [Mint](https://github.com/yonaskolb/Mint) を利用してプロジェクトでバージョンを固定+開発者のローカルマシンに依存させないといった設定をよく実施するかと思います。

https://qiita.com/usamik26/items/be813a224a2146daffb7

https://dev.classmethod.jp/articles/package_management_by_mint/

これまでは特に問題がなかったのですが、 Apple Silicon ( M1 Mac ) の登場によって、[Homebrew 経由でインストールしたものを Build Phases で実行する際に PATH を

元記事を表示

【Swift】ボイスチェンジャーアプリでBluetoothイヤホンを使用して録音再生できるようにしてみた

「おばけだぞう」と子供がしつこく言うので、変声機アプリを作ってみた。

#サンプル画像:
![RPReplay_Final1631489151.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/715627/bd07fb63-7aa5-59e7-49b7-5db7208e06a7.gif)

#アプリ概要:
-「Record」ボタンで音声を録音
-スライダー「Speed」「Pitch」、スイッチ「Echo」「Reverb」で声のエフェクトをかける
-「Play」ボタンで再生、モーダルに画面遷移してお化けアイコンの表示

参考サイト:
[[Swift4.2]蝶ネクタイ型変声期作ってみた](https://qiita.com/tosh_3/items/95e9e41279ba0ffcd3f4)

#課題:
再生時に「音量」が上がらない。
Bluetoothイヤホンを接続すると「録音・再生」が機能しない。

下記のサイトを参考:
[AVAudioSessionで録音する際に、音はbluetoothイヤホ

元記事を表示

【Swift】アプリ内でダークモード/ライトモードを設定したい

## やりたいこと

アプリ内で、OS設定によらずライトモード/ダークモードを設定したい。

##設定方法

1行加えるだけで、即時にアプリ全体に反映されます。

* ダークモードに設定する場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .dark
“`

* ライトモードに設定する場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .light
“`

* OS設定に従う場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .unspecified
“`

起動時に設定する場合は、initial view controllerの viewDi

元記事を表示

1年間Flutterで開発していてわかったアクセシビリティの問題(iOS編)

この1年コンスタントにFlutterでコーディングをしていてわかった_スクリーンリーダー(VoiceOver)_の問題についての記録です。
Androidについては[1年間Flutterで開発をしていてわかったアクセシビリティの問題(Android編)](https://qiita.com/yama_1983/items/6c51e83b980c512019ab?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share)をご覧ください。

—–

## 1. 項目を選択したときのガイドアナウンスが読み上げられない
ボタンや項目などを選択したときには通常
_開くにはダブルタップします_
のようなアナウンスがあります。
これによりユーザは項目が操作可能かどうかを知ることができます。

## 2. リストをスクロールしたときの度合いを読み上げない
通常リストをスクロールさせた場合

* リストの総数
* 表示されている項目の開始位置
* 表示終了位置


_全50行中10行目から20行目まで_
のよう

元記事を表示

[Xcode] iosアプリ開発で通知が表示されない

## どゆこと

ionic + angularでiosアプリ開発を少し勉強していたところ,通知がどうやっても表示されない問題に遭遇しました.

初めはコードに問題があると思い,色々と調査を行いましたがどうやら原因はそうではなかったようです.

iosアプリはApple IDがあれば無料で開発することができますが,有料のApple Developer Program(ADP)というメンバシップが存在し,その有料のメンバシップに入っている開発者でないと使えない機能が存在するようです.

今回私が詰まっていた通知機能は有料会員でないと使えない機能でした.

なので有料会員にならないと試せないようです.

有料会員でないと使えない機能及び無料会員でも使える機能は以下のページにまとまっています.

https://help.apple.com/developer-account/#/dev21218dfd6

![参考](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401124/b462e83d-52a7-c03

元記事を表示

【Swift】unable to open file (in target tests in project)というエラーでビルドができない

#状況
#####プロジェクトを起動するとunable to open file (in target tests in project)というエラー文が出ていてビルドができない。
#原因
#####CocoaPodsのインストールが無い為。
#解決方法
#####ターミナルにて下記のコードでインストールをして私の場合は解決しました。
“`
sudo gem install cocoapods
“`
#####又、プロジェクトフォルダにあるPodfile.lockを削除し、ターミナルにてpod installをしても解決できるみたいです。
https://cocoapods.org/

元記事を表示

【Swift】EUC-JPでURLエンコーディングする

#はじめに
クエリを含むURLを作成したい時には、URLエンコーディングを行う必要があると思います。
EUC-JPでエンコードする記事はあまり見かけないのでまとめます。(今どき、EUC-JP使っているサーバーなんてほぼないと思いますが。。。)
ご参考になればと思います!

# 実装してみる
今回は String の Extension で実装します。

“`swift
import Foundation

extension String {
var encodedByEUCJP: String {
// エンコーディングしない文字列をキャラクタセットとして定義
let allowedCharacters = CharacterSet(charactersIn: “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~”)

// エンコーディングを定義する
let eucjpEncoding = String.Encoding(ra

元記事を表示

【Flutter】社内向け入門講座の内容公開

インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)

## 本記事で伝えること
– Flutterを用いた簡単なアプリ開発デモ
– 開発効率をあげるTips
– デバッグ方法
– おすすめパッケージ
– アーキテクチャ紹介
– やっておいたほうが良いこと
– 知っておいて損しないこと
– 情報収集源

## 本記事を読む前に
本記事を読む前提として以下を実施済みですと、より内容が理解しやすいかと思います。
– Flut

元記事を表示

【iOS】Metal Best Practicesの解説(9) ロードと保存

[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

### [Load and Store Actions(ロードと保存)](https://devel

元記事を表示

fastlane match で既存の秘密鍵、証明書、プロビジョニングを取り込む

## 想定ケース

– 諸事情により Apple Developer Portal へのアクセス権限がない
– 手元に秘密鍵、証明書、プロビジョニングのファイルはある、もしくは Keychain に取り込み済み
– ファイルで直接やりとりするのではなく、 fastlane match で管理したい

## 作業手順

### 前提

– fastlane 2.193.1
– fastlane match 導入済みで、Storage の整備や Passphrase についても設定済み
– 秘密鍵、証明書については有効なものを Keychain に取り込み済み
– プロビジョニングについては有効なものがファイルとして手元にある

### 秘密鍵、証明書、プロビジョニングの用意

秘密鍵と証明書を Keychain からファイルに書き出します。

この際、開発者間でやりとりする場合のように、 Keychain 上で秘密鍵と証明書を2つ選択して1つの p12 ファイルとして書き出すのではなく、秘密鍵と証明書それぞれ1つずつ選択した状態でファイルに書き出していきます。

ファイルの拡張子について

元記事を表示

fastlaneのdeliverからAppStoreのメタデータ送信する際の留意点

## 概要
2021/08現在における `fastlane deliver` を使った AppStore へのメタデータ送信について、ドキュメントが少なかったので留意点を記しておきます。

## 前準備
#### ■ AppStre API Key

2021/08現在では `deliver` からメタデータをCI経由で送る場合 `AppStore API Key` が必要です。
これがないと 2FA をクリアできないので、、
ローカルで実行するだけであれば、`fastlane` で利用できる通常のログイン機構で大丈夫です。
その場合、コマンドの途中で 2FA のパスワードを求められることになります。

ちなみに.envなどを利用して環境変数に必要keyを格納し、下記のようにAPIKeyを取得できるような `fastlane private action` を `Fastfile` に作っておくと便利です。

“`ruby
#### App Store API への認証Key生成

desc “App Store Connect API Key”
# private_lane :ap

元記事を表示

[Flutter][iOS] permission_handler 不要な権限リクエストを削除しないとApp Store Connectから怒られる

**アプリをApp Store Connectに送信した際に(CI/CDで自動配布した際に)警告メールが届き、testflightでアプリをまくことができなかった**
原因:どうやらAppleの静的解析ツールに引っかかっているらしい

アプリのOS権限管理をpermission_handler 8.1.4+2にした後、ビルドしたバイナリをApp Store Connectに送信したら以下のようなめっちゃ長いメールが届いた。そんな場合の対処法をメモ
結論として、iOSのセットアップとして公式に記述されている方法と少し違った?ので注意が必要。
###来たメール
>
App Store Connect
>
Dear Developer,
>
We identified one or more issues with a recent delivery for your app, “hoge-app” 1.0.0. Please correct the following issues, then upload again.
>
ITMS-90683: Missing Purpose St

元記事を表示

iOSとAndroidを区別するのに便利なJavaScript置いておくね

“`
var isAndroid = (UA && UA.indexOf(‘android’) > 0) || (weexPlatform === ‘android’);
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === ‘ios’);
“`

これは基本的にユーザーエージェント(UA)を見て正規表現でandroidかiOSかを判別しています。`UA &&`の部分はnullチェックですね。UAの値を取得できなかった時にエラーで落ちないようにしています。

日本のスマホのシェアはAndroidとiOSが99%を占めているので上記以外はその他で例外処理をしてしまって良いでしょう。

元記事を表示

Compositional Layoutsで水平方向のスクロール出来た!けど、垂直方向にもスクロール出来てしまう時の対処法

# 現状
![CompositionalLayoutsHorizontal現状.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/e99086e2-908a-ee3e-39b2-640e8c3a35bc.gif)
# 解決策
以下のコードをCollectionViewに対して設定することで解決しました。

“`swift:ViewController
collectionView.isScrollEnabled = false
“`
![CompositionalLayoutsHorizontal改善.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/613932cf-7412-d374-7b64-4c3ed038c338.gif)

# 検証したこと
以下のdelegateメソッドを呼んで水平スクロールと垂直スクロールの時の挙動を調べた。

“`swift:ViewCont

元記事を表示

iosアプリで車種と走行距離から炭素排出量を計算するプログラム

# 人間は炭素でてきている

![124107813116516430885.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33704/f47716c7-efcb-e38f-11bc-0640bc550493.jpeg)

「水35L、炭素20㎏、アンモニア4L、石灰1.5㎏、リン800g、塩分250g、硝石100g、硫黄80g、フッ素7.5g、鉄5g、ケイ素3g、よし構築式を書くぞ。あとは魂の情報だ、、、」

エンジニアのみなさまにおかれましては常に真理の追及をしていると思いますが人体錬成をするさいにはリスクを考慮したいところです。いろいろと持ってかれる可能性があります。手とか足とか弟とか。

と、話を大きくそらしますが、先月から電通イノベーションスタジオ@サンフランシスコで働いています。案件が大量に降ってくるので忙しくて大変です。エンジニア仲間が欲しいのでこうやってネタ記事を書いてる次第です。

この記事が面白かったらGoodボタンとチャンネル登録とエントリーをお願いします!

https://ww

元記事を表示

OTHERカテゴリの最新記事