- 1. [SwiftUI] Navigation Barに画像を載せる
- 2. Kinesis Video StreamのsignalingChannels を使って iOSからWebRTCする
- 3. 環境センサーのデータをスマホでモニタリングする(Flutter) – データ表示編 –
- 4. SwiftのStructの参照渡し、値渡し、CoWの挙動確認
- 5. Could not cast value of type ‘UIViewController’が出た時の対処法
- 6. enum Associated Values と Raw Values を両立させる
- 7. iOSアーキテクチャ勉強
- 8. SwiftUIのボタンで少し凝ったハイライト表現をするには?
- 9. 【iOS】Metal Best Practicesの解説(7) 画面スケール
- 10. イニシャライザとは? -init()
- 11. 【Swift】UITextViewでHTMLを表示してアンカータグをタップ可能にする
- 12. 【Swift】半角/全角/URL/改行を区別して文字数をカウントする
- 13. Flutter Appを実機で動かす (M1 Mac, iOS)
- 14. React Nativeで開発したiOSアプリを、Appleを介さずに特定少数のユーザに配布する方法
- 15. [Flutter] ios 色々エラーが出て困った時
- 16. 掃除してみる
- 17. APNS のペイロードデータを struct にマッピングする
- 18. [iOS] URLSchemeで起動した時のAppDelegate/SceneDelegateの呼び出し順序
- 19. 【iOS】Metal Best Practicesの解説(6) ドローアブル
- 20. unity ios書き出しのスプラッシュを任意の色にする
- 21. flutter_flavorizr + flutter_flavorでFlutterの環境切り替えした後に、iOSでbuildした時の 「Unable to load contents of file list」の解決方法
[SwiftUI] Navigation Barに画像を載せる
# NavigationBar に画像を載せる
## 以下で困ってる場合
– navigationBarTitleに画像が使えない。。。
– ios14以上だと、toolbarを用いて、画面上に画像を載せることが可能であるが、ios13以上だと、toolbarが使えない。。。
– ZStackで、NavigationBarに画像を被せてみるが、遷移してもNavigationBarに画像が残るのでフラグとか立てて消すのがめんどくさそう。。。
https://qiita.com/fr0g_fr0g/items/d121d63a82373f74b75c## こうしたい
– NavigationBarに画像のせる
– 遷移するとNavigationBarの画像が変わる![スクリーンショット 2021-08-25 19.29.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1322570/918807e3-b1c3-25e1-5e5e-d703cf16d9e4.png)
![スクリーンショット 2
Kinesis Video StreamのsignalingChannels を使って iOSからWebRTCする
一応オフィシャルでサンプルがあるけど、
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-ios
そこそこ作り込んでるサンプルで、試しずらかったので簡易なサンプルを作る。# 作るもの
iOS(Master 1) -> kinesis-video-streams signalingChannels -> ブラウザ(Viewer 多 audience/publisher)## 成果物
### iOS
![Videotogif-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159266/aa1fb33d-7356-f8cb-4b72-8a7641899404.gif)
### web
よっしゃできた
Amazon Kinesis Video Streams の webrtc使っての
環境センサーのデータをスマホでモニタリングする(Flutter) – データ表示編 –
## 概要
* 新型コロナの影響で環境センシングデバイス、可視化ツールの需要が高まっている。
* まず弊社オリジナルのマイコンボードの「IoT-DX-Kit」を使って、気温、湿度を取得してみる。
* スマートフォンにBluetooth経由で温湿度のデータを送り可視化してみることにした。
* スマートフォンアプリの開発環境は、Flutterを採用しiOS/Android両方の動作を確認してみる
IoT-DX-Kit 紹介ページiPhone上で動作している様子(湿度の取得に失敗し検証中)
![スクリーンショット 2021-08-29 11.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701445/919787b6-c6cb-b15a-2cc1-bf04b0655b83.png)Android上で動作している様子(温湿度両方取得成功)
![スクリーンショット 2021-08-29 11.39.08.png](htt
SwiftのStructの参照渡し、値渡し、CoWの挙動確認
# 結論
– クロージャへは参照渡し、キャプチャリストを使えば値渡し
– 関数へは値渡し、inoutを使えば参照渡し## Copy-on-Write (CoW)
– SwiftのArrayやStringはパフォーマンスを考慮して、内部的にCoWが実装されている
# 確認
## 環境
– Xcode 9.4
– Swift 4.1## Playground
“`swift
import Foundationfunc address(of object: UnsafeRawPointer) -> String {
let addr = Int(bitPattern: object)
return String(format: “%p”, addr)
}func printLine(_ line: Int = #line) {
print(“#L\(line)”)
}print(“— Clousure: Int —\n”)
do {
var value = 10let closure1 = {
Could not cast value of type ‘UIViewController’が出た時の対処法
## Could not cast value of type ‘UIViewController’の対処
自分がエラーを起こして、画面遷移ができなかった時の原因と対処を記録として残します。コードはこんな感じでした。
“`
@IBAction func tappedDontHaveAccountBottun(_ sender: Any) {
let storyBoard = UIStoryboard(name: “Login”, bundle: nil)
let homeViewController = storyBoard.instantiateViewController(identifier: “LoginViewController”) as! LoginViewController
navigationController?.pushViewController(homeViewController, animated: true)
}
“`### エラーの原因
このコードでのidentifierのところが
enum Associated Values と Raw Values を両立させる
## 背景
Swift の enum においては、 Associated Values と Raw Values を利用することができます。
これらはそれぞれ単独での利用は問題ないのですが、両方を同時に利用するとすると、コンパイルエラーとなってしまいます。
**それぞれ単独での利用は OK**
“`swift:Associated Values
enum Screen {
case home(tabIndex: Int)
case search
case setting
}
“`“`swift:Raw Values
enum Screen: String {
case home = “Home”
case search = “Search”
case setting = “Setting”
}
“`**同時利用が NG**
“`swift:Associated Values & Raw Values
enum Screen: String {
case home(tabI
iOSアーキテクチャ勉強
## MVC(Cocoa MVC)
– View
– 表示、入出力
– Controller
– 入力に基づくModelとViewの制御
– Model
– データの保持、通信ViewControllerがViewとControllerの役割を両方持つため肥大化しがち
Massive View Controllerとか呼ばれる普通言われるMVCとはModelがデータの変更をViewに通知すると言う点で違う
## MVP
MVCと違い入力を受け付けるのがControllerではなくViewになるViewControllerはViewとして扱われる
– Supervising Controller
– データバインディングによりViewがModelを監視し、データ更新があれば表示も更新する
– データを加工せずに表示できるのでPresenterの負担を軽減できるがModelがViewのレイアウトに依存する
– Passive View
– 必ずmodelとViewの間はPresenterが介すのでViewとModelが分離するがPresenterの負担
SwiftUIのボタンで少し凝ったハイライト表現をするには?
### ButtonStyleによるハイライト表現
SwiftUI においてボタンのタップ中のハイライト表現をしたい場合、`ButtonStyle` を作り、`configuration.isPressed` によってハイライト時の見た目に変更します。以下の例ですと、タップ中はボタンの背景色が変わるようになっています。
![Aug-29-2021 07-52-00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16508/c45d6d21-738d-1891-20bb-d9fce373a542.gif)
“`swift
struct CustomButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.padding()
.foregroundColor(Color.wh
【iOS】Metal Best Practicesの解説(7) 画面スケール
[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
### [Native Screen Scale (iOS and tvOS) (画面スケール)](
イニシャライザとは? -init()
##イニシャライザとは、
型(クラス、構造)のインスタンスを初期化(僕のイメージでは再設定)するメソッドのこと“`swift
class User {
let name: String// funcが不要(initキーワードのみ)
init(name: String) {
// 全てのプロパティを初期化する前にインスタンスメソッドを実行することはできない
// printName() → コンパイルエラー
self.name = name
printName() // OK
}// インスタンスメソッド
func printName() {
print(name)
}
}
let user1 = User.init(name: “hoge”)
// 呼び出し時のメソッド名が省略可能
let user2 = User(name: “hoge”)
“`
####イニシャライザの順序
イニジャライザは、プロパティの初期化をしてからインスタン
【Swift】UITextViewでHTMLを表示してアンカータグをタップ可能にする
# やりたいこと
UITextViewでhtmlを表示してアンカータグをタップ可能にかっただけなのですが、巷の記事を参考にしても実装が出来なかったので成功体験を共有できればと思います。# 環境
* Xcode:12.5.1
* Swift:5.4.2# 実装
NSAttributedString型に変換する際にオプションを指定してあげるだけです。
これでHTMLとして表示することが可能です。“` swift
textView.attributedText = convertToAttributeString(contents: information.infoContents)private func convertToAttributeString(text: String) -> NSAttributedString? {
guard let data = text.data(using: .utf8) else { return nil }
do {
return try NSAttrib
【Swift】半角/全角/URL/改行を区別して文字数をカウントする
## はじめに
iPhone向けに、投稿を予約することで好きな時間にTwitterに呟いてくれるアプリをリリースしています。
https://apps.apple.com/jp/app/twi%E3%82%B9%E3%82%B1/id1491291009
興味がある方はぜひ使ってみてください。
この記事は、上記アプリに入力文字数に応じた残入力可能文字数の表示機能を設置する際に調べたことをまとめるための記事です。
### Twitterの文字数カウントの法則
全角文字 → 1文字カウント
半角文字 → 0.5文字カウント
改行 → 0.5文字カウント
URL → どんな長さでも、11.5文字カウント出典:
> https://afila0.com/twitter-character-count/
> https://pc-chain.com/sns/twitter-character-limit/古い記事なんかだと改行1文字URLが23文字、みたいになってることもあるが、2017年ごろに更新されたらしい。
> https://www.localfolio.co.jp/b
Flutter Appを実機で動かす (M1 Mac, iOS)
# 環境
– MacBook Air (M1, 2020)
– MacOS 11.4
– Flutter (stable, 2.2.3)# Homebrew Cask
次のコマンドをターミナルで実行し、Flutterをダウンロード、インストールする。
“`
brew install –cask flutter
flutter doctor
“`出力される指示に従って環境構築を進める。
## Rosetta 2
FlutterとDartはM1チップのMacに適応している最中であるため、
M1 MacではFlutter SDKのインストール後に下記のエラーが出ることがある。“`
Bad CPU Type in executable
“`その場合、Rosetta 2をインストールし、M1が解釈できるバイナリに翻訳する必要がある。
“`
softwareupdate –install-rosetta
“`M1 MacでFlutterを使うことについての補足は、公式がこのページにまとめている。
https://github.com/flutter/
React Nativeで開発したiOSアプリを、Appleを介さずに特定少数のユーザに配布する方法
## はじめに
iOSアプリの作成時、デモをユーザに使ってもらって意見もらいたい。みたいなニーズあると思います。
ただ、iOSアプリを配布するにはいろいろと面倒な手順を踏む必要があります。
https://qiita.com/mokkos/items/85540e95404df4a9c5a4今回は、そんな面倒な手順を避けて、「とりあえず特定少数のユーザにiOSアプリを配布する方法」を紹介します。
(「iOSアプリを配布」と言っていますが、正確には別アプリを介したエミュレータ上で実行させる方法になります。)
## 利用するサービス
iOSアプリを配布するために、Expoを利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/f7eb028f-65ba-2b90-3c5f-5a38b6b877e2.png)
>Expoは、ユニバーサルなReactアプリケーションのためのフレームワークであり、プラットフォームでもあります。React Nativeとネイティ
[Flutter] ios 色々エラーが出て困った時
掃除してみる
`$ flutter clean && \
rm -Rf build && \
rm -Rf ios/Flutter/Flutter.framework && \
rm -Rf ios/Flutter/Flutter.podspec && \
rm -Rf ios/Flutter/App.framework && \
rm -Rf ios/Pods && \
rm -Rf ios/.symlinks && \
rm -Rf ios/build && \
rm -Rf ios/Runner.xcworkspace && \
rm -f ios/Podfile && \
rm -f ios/Podfile.lock && \
rm -f pubspec.lock && \
flutter build ios && \
flutter run`
APNS のペイロードデータを struct にマッピングする
## TL;DR
“`swift
struct APNSPayload: Decodable {
struct APS: Decodable {
struct Alert: Decodable {
let title: String
let body: String
}let alert: Alert
let badge: Int?
}struct CustomField: Decodable {
let hogeList: [String]
let fuga: String?
}let aps: APS
let customField: CustomField?init(decoding userInfo: [AnyHashable: Any]) throws {
let json = try JSONSerialization.data(withJS
[iOS] URLSchemeで起動した時のAppDelegate/SceneDelegateの呼び出し順序
※本記事の前提環境:Xcode 12.5.1
AppDelegate/SceneDelegateを両方実装している場合に、URLSchemeのトリガーによって、URLパラメータ取得系のdelegateメソッドがどのように走るのかを調査しました。
結構メンドクサイなと思いました…
なお、アプリ未起動状態でURLSchemeによってアプリが起動された場合のデバッグについては、以下の記事を参考にさせていただきました。
https://qiita.com/AlecYawata/items/79f45e85ecc573860dcb
# iOS 13以降
注:URLパラメータ取得系のdelegateメソッド以外については省略しています。
## アプリ未起動状態
1. AppDelegate – application(_ :didFinishLaunchingWithOptions)
2. SceneDelegate – scene(_ :willConnectTo :options)※注:scene(_ :openURLContexts)は呼ばれない
## アプリ起動状態
【iOS】Metal Best Practicesの解説(6) ドローアブル
[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
### [Drawables (ドローアブル)](https://developer.apple.c
unity ios書き出しのスプラッシュを任意の色にする
#環境
Unity 2019.4.15
Xcode 12.4この環境でデフォルトで書き出すと、黒に近い灰色のスプラッシュになります
Unityで黒のpngを設定しても、思った効果になりませんでした
仕様が変わったようでXcodeのStoryBoardから読んでるらしいです。#解決策
一応、ビルドが通りましたが
いいのか、悪いのか、、、1、Unityのスプラッシュ設定は、デフォルトのまま(show Splash Screen OFF)書き出し
2、Xcodeで、StoryBoardを開きRootViewの下を削除する
3、RootViewのBackgroundとTintを任意の色にする![スクリーンショット 2021-08-27 15.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514937/e119cf5e-c660-332e-3a76-8921de926efd.png)
flutter_flavorizr + flutter_flavorでFlutterの環境切り替えした後に、iOSでbuildした時の 「Unable to load contents of file list」の解決方法
# 概要
Flutterの開発環境/本番環境を「flutter_flavorizr + flutter_flavor」を使って、切り替えできるように対応しました。
下記の問題が発生しました。 こちらの記事のその解決を記載しています。* iOSでbuildすると、「Unable to load contents of file list: ‘/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug-development-input-files.xcfilelist’」のErrorが出て、buildが通らない
## 対応環境
(Errorが出ている。。。あとで直そう)“`
[✓] Flutter (Channel master, 2.5.0-7.0.pre.15, on macOS 11.3.1 20E241 darwin-x64,
locale ja-JP)
[!] Android toolchain – develop for Android devices (Android SDK versio