- 1. [Swift] typealiasって?
- 2. [Swift]修飾子のLazyとは?
- 3. iPhone13を発表したAppleEventメモ
- 4. Flutterで手書きを実装する
- 5. FlutterがiOSシミュレータを認識しなかった話
- 6. 【Swift】Int型 ⇄ 16進数文字列 ⇄ バイト配列(UInt8配列) を相互変換する
- 7. iOS 開発の頑張らないビルド用 Swift CLI ツール管理
- 8. 【Swift】ボイスチェンジャーアプリでBluetoothイヤホンを使用して録音再生できるようにしてみた
- 9. 【Swift】アプリ内でダークモード/ライトモードを設定したい
- 10. 1年間Flutterで開発していてわかったアクセシビリティの問題(iOS編)
- 11. [Xcode] iosアプリ開発で通知が表示されない
- 12. 【Swift】unable to open file (in target tests in project)というエラーでビルドができない
- 13. 【Swift】EUC-JPでURLエンコーディングする
- 14. 【Flutter】社内向け入門講座の内容公開
- 15. 【iOS】Metal Best Practicesの解説(9) ロードと保存
- 16. fastlane match で既存の秘密鍵、証明書、プロビジョニングを取り込む
- 17. fastlaneのdeliverからAppStoreのメタデータ送信する際の留意点
- 18. [Flutter][iOS] permission_handler 不要な権限リクエストを削除しないとApp Store Connectから怒られる
- 19. iOSとAndroidを区別するのに便利なJavaScript置いておくね
- 20. Compositional Layoutsで水平方向のスクロール出来た!けど、垂直方向にもスクロール出来てしまう時の対処法
[Swift] typealiasって?
#はじめに
typealiasという文字をを見たときなんか、ふわっとエイリアンの顔が頭に浮かんだのは僕だけでしょうか。多分仲間がいると思っています。
typealiasは今までにも見たことはあったのですが、どういう場面で使えるのか分かっていなかったので調べてみました。この記事では使い方の一部をご紹介します。#ざっくり理解するtypealias
typealiasはざっくり、IntやStringなどの型に自分用の名前をつけて使えるよー。というものです。
例えばInt型の数値を扱うときにIntっていう型の名前はちょっとダサいな。と思ったとしましょう。
そこでtypealiasの出番です。これを使うとIntの性能を持ったあなた好みの名前の型を作れます。
以下に例を示します。“`
typealias Explosion = Int // これでIntの性能を持ったExplosionという型が作れました!// ExplosioinはIntと同じ特徴なので当然整数を代入することができます。
let num1: Explosion = 3
let num2: Explosion = 5
[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+4dev_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 Foundationextension 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 Key2021/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