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

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

iOS 15でSwiftUIビューを定期的にリロードします

iOS 15のSwiftUI 3では、新しいビュー構造`TimeLineView`があります。このビュータイプを使って、(あなたが定義した)一定期間ごとにビューをリロードすることができます。

例えば、アニメーションのロード画面を作ることができます。

![ezgif-2-554a1eb56133.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/f2be0d9e-a512-e20b-67ea-4f33d580f6a5.gif)

## 実装

“`swift
public init(_ schedule: Schedule, @ViewBuilder content: @escaping (TimelineView.Context) -> Content)
“`

コードクロージャに渡された変数`Context`があります。この変数を使って、ビューがリロードされた時間にアクセスすることができます。

“`swift
import SwiftUI

元記事を表示

事業フェーズごとにiOS/Androidアプリ開発で気をつけるべき観点

色々な事業フェーズに携わる中で、事業フェーズ別のアプリ開発に関する観点に対して思う所があったので個人的な見解をまとめます。

# 前段
事業状況は0→1、1→10、10→100などの局面によって変化していくものです。
その事業の局面ごとに最適なアプリの設計や重視すべき観点というのは変化していくのではないかと私は思います。
もちろん、アプリの特性と組織状況によっても最適なアプリの設計は変わるものですが、そこはサブ要因として今回は踏み込まずに思うところを記載していこうと思います。

# 0→1フェーズ
0→1フェーズは仮説検証を繰り返し行い、ビジネスが成立するコアサイクルを見つけ出すフェーズです。
この局面ではアプリに必要とされる機能やUXもどんどん変化するため、そもそもネイティブアプリとして作るべきかどうかも含めて検討すべきフェーズです。
可能であれば、NoCodeによるアプリ開発で簡素な仮説検証を繰り返して一定の方向性を見つけてからアプリ開発を開始すべきでしょう。
この段階で実際にアプリを開発する場合、仕様変更が頻発するとともに0→1に興味を持つ少数のエンジニアでどんどん開発を進めてい

元記事を表示

iOSアプリのユニバーサルリンクの設定方法

# はじめに
調べると古い情報が出てきがちなのでまとめました
iOS14,iOS15時代のものです

# 目次
1. [ユニバーサルリンクにしたいURLを決める](#ユニバーサルリンクにしたいurlを決める)
1. [apple-app-site-associationを作成する](#apple-app-site-associationを作成する)
1. [apple-app-site-associationを置く](#apple-app-site-associationを置く)
1. [アプリ側の設定](#アプリ側の設定)
1. [確認](#確認)

# ユニバーサルリンクにしたいURLを決める

↓これにします
`https://sampleApp/app`

# apple-app-site-associationを作成する
apple-app-site-associationを**自分**で作成します
自分で作らないと大変なことになります

“`
{
“applinks”: {
“apps”: [],
“details”: [

元記事を表示

無料でプロトタイプのiOS動画再生アプリを作る話(2021)

## 概要

iOSアプリ(iPhone等)の開発についていろいろ調べたところ、仲間内の配布であれ、プロトタイプであれ、Appleさん(AppStore)経由でないとまず無理な状況となり、導入障壁となっていると感じております。

開発テストができる`TestFlight`を使っても、テスト向け配布にはAppleさんの審査が必要だったり、iOSアプリ開発に慣れていなければ開発者プログラムの加入や審査手続き等で時間とお金を持っていかれます。また、サイドローディング等も耳にしますが、真っ当なソフトハウスであれば、ちゃんとお金を払って開発する事になります。

そんな状況の中、iOSで手軽にプロトタイプを配布する事は難しいのか、HelloWorldから一歩踏み込んで模索してみました。

:::note warn
私自身アプリ開発の専門家ではないので、間違いはご指摘いただければ幸いです。
また、私がWEB系開発者である事もあり、基本的にJavaScript(NodeJS)ベースの説明は省略されていますので前提知識がないと難しいかもしれません。
:::

## 開発・配布手法の比較

ざっと探してみ

元記事を表示

【SwiftUI】toolbar Modifierの表示位置(iOS)

SwiftUIのtoolbarの表示位置です。
全12種で細かい事を言う並びに優先順があるので全部違います。

#サンプルコード
“`swift
NavigationView{
Text(“Hello, World!”)
.toolbar{
ToolbarItem(placement: .navigationBarLeading){
Text(“leading”)
}
}
}
}
“`

NavigationView内のViewに.toolbar Modifierをつけます。
中にはToolbarItemを使って配置します。
引数placementにToolbarItemPlacementで位置の指定を行います。

#対応表

| ToolbarItemPlacement(左から順) | 表示位置| 備考 |
|:–|:-:|:-:|
| .navigationBarLeading | 左上(leading) | |
| .cancellatio

元記事を表示

【Swift】画面の戻り方のまとめ

Swiftで画面を戻る処理が何種類かあるのでまとめてみました。

## モーダル型で戻る

“`swift
self.dismiss(animated: true, completion: nil)
“`
`dismiss`で画面を破棄しています。

## モーダル型で2つ前の画面に戻る

“`swift
self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)
“`
2つ前の画面に戻るコードです。

## 1つ前の画面へ戻る(NavigationController)

“`swift
self.navigationController?.popViewController(animated: true)
“`
NavigationControllerで1つ前の画面へ戻る処理。

## トップの階層へ戻る(NavigationController)

“`swift
self.navigationController?.popToRo

元記事を表示

[Flutter] FCM vs Local Notification

# はじめに
FlutterでAndroidとiOSのアプリを両方開発しているところで、Push Notificationを実装することになりました。
最初はFCMとLocal Notificationの機能に関して紛らわしいことがありましたので、今回はこれに関して整理しようと思います。

# FCM (Firebase Cloud Messaging)
https://firebase.google.com/docs/cloud-messaging?hl=ja
> Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に送信するためのクロスプラットフォーム メッセージング ソリューションです。

Firebaseサイトで定義されてる概念で、Firebaseサーバーを使って簡単にユーザーにメッセージを送信することができるとで理解すれば、大丈夫だと思います。

# FlutterにFCMを適用する方法

https://pub.dev/packages/firebase_messaging/install

Flutterでは、firebase_messag

元記事を表示

Freezedの使い方

#はじめにFreezedとは
簡単に言えばコピーメソッド等を含む**Immutable(不変)**なクラスを生成することができるパッケージのこと
Freezedでコードを生成することで便利なメソッドがいくつか使用できるようになる。

:::note info
・copyWith
nullを割り当てることが可能な複製メソッド

・==
同値であることの確認

・toString
文字列化した時の結果

・fromJson
Mapからの変換

・toJson
Mapへの変換

:::
上記のメソッドを使用して開発を楽にしましょう!

#Freezedの使用方法
## インストール

“`pubspec.yaml
dependencies:
// @freezed などを使うために必須
freezed_annotation:

dev_dependencies:
//コード生成するために必要
build_runner:
freezed:
// fromJson/toJson 

元記事を表示

サポーターズ エンジニア1on1面談イベントに参加してきた

# はじめに
B3 iOSインターン生の[にいまる](https://twitter.com/niimaru09)です。
逆求人イベントに参加してきたので、参考になるようにレポートを書いてみます。

# サポーターズとは?
僕がいつも使ってる、学生エンジニア就活のサポートをしてくれるサービスです。(回し者じゃありません)

https://talent.supporterz.jp

# どんなイベントなの?
一日に最大8社と面談できる逆求人イベントです。雰囲気はめちゃめちゃカジュアルでした!
参加するにはサポーターズ側で選考がありますが、選考を通り抜けると早期選考、自己紹介へのフィードバック、長期インターンのオファーなどがあり、非常に魅力的です。

参加確定後は企業さんにする自己紹介の準備をするのですが、任意でサポーターズ側で自己紹介準備のための面談みたいなものに参加することができます。

僕は自己紹介に命かけてたので、自己紹介資料は3日くらいかけてみっちり作りました!

# 参加までの流れ
選考

参加確定

サポーターズ側でのサポート面談

自己紹介の準備

1on1面談イ

元記事を表示

iOSアプリでBrightcove SDKを使ってDRMコンテンツを配信するまでの話

# はじめに
初めまして。株式会社運動通信社でスポーツブルアプリのiOSを担当している松川です。
今回はスポーツブルの一機能「[スポーツブルプレミアム](https://sportsbull.jp/premium/about/)」で動画配信を行う際に必要になったDRM有効化の手順をまとめました。
表題にもある通り、弊社では動画の再生に[Brightcove](https://www.brightcove.com/ja/)という動画配信プラットフォームを利用しているので、その環境でDRMコンテンツを再生するまでの流れになっています。
※DRMとはDigital Rights Managementの略。デジタル著作権管理のことで、音楽や映画などのデジタルコンテンツの著作権を保護する技術や機能の総称です

# 流れ
1. AppleからFairPlay Streaming Deployment Packageを取得する
2. 証明書の発行(FairPlay Streaming Certificate、Application Secret Key)
3. 取得した情報をBrightcoveに伝

元記事を表示

Agoraを使った音声ライブ配信アプリの作り方

## はじめに
プレミアム音声サービスNowVoiceのAndroidアプリ開発を担当しているkiyoです。
NowVoiceアプリでは、音声ライブ配信機能を提供しています。
この記事では、ライブ機能を実装するまでの導入手順や実装ポイントについてまとめました。

## NowVoiceライブ配信機能

NowVoiceアプリのライブ配信機能では、単純なライブ配信機能の他にも以下のような機能を備えています。
そしてその機能のほとんどがAgoraSDKを介して実装されています。

“`
## ライブ配信機能
– MAX4人の対談機能
– ホストがユーザを対談に招待する機能(招待機能)
– リスナー側がホストに対談をリクエストする機能(挙手機能)
– コメント投稿機能
– 課金型コメント投稿機能(スーパーチャット)
“`

この記事では、AgoraSDKを用いた音声ライブ配信機能を実現するためのポイントについてご説明します。

## 目次
1. Agoraとは
2.

元記事を表示

機械学習で必殺技分類(動作分類モデル作成からiOSでの推論実行まで:失敗編)

#動画を機械学習して、動作の種類を判定する

GUIで機械学習ができるCreateML(Macで実行可能)。
動作の分類(Action Clasification)もできます。
実は僕は今回学習に失敗したのですが、作業フローはひととおり書いたので、公開しちゃいます。

**【こういうのが作りたかった】**

#手順(データセット準備)

###1、動画を集める。
分類したい動作の動画を集めます。
今回はこのようなアクションを用意してみました。
  Firebase Cloud Messaging(FCM)は中国では使えない

iOS/Androidアプリの開発を協業している他社担当者から、システムテストにおいて、

「プッシュ通知が届かない」
「iOS/Androidとも同じく」

という報告があり、再現性を確認したのですが弊社側では再現せず…

同アプリはプッシュ通知にFirebase Cloud Messaging(FCM)を利用しています。
バックエンド側のログなどを追うと、どうやら、SDK経由で取得できるはずのプッシュトークンが取得できていない模様。

で、協業他社によくよく聞いてみると、中国でテストをしている、とのことで、
調べたところ、FCMって中国(本土)では使えないんですね…(→参考リンク)

同アプリは日本国内での利用が前提なので、協業他社に「プッシュ通知のテストだけは国内でお願いします」と依頼するだけで済んだのですが。
もしグローバルなサービスだったら、中国本土で使えるプッシュ通知mBaaSに乗り換えるなど、大幅なアーキテクチャ変更になるところでした。:cold_sweat:

なお、FCMの公式ドキュメントではその辺りの制限事項に関する記述は見つけられませんでした。

参考リンク:

元記事を表示

【Swift】処理フローが「一発」でわかる非同期の順次処理の書き方

## はじめに
今回は、スパゲッティコードにならないような順次処理を考えてみたので記事にしてみました。

特定の順番で毎回実行される処理って、条件分岐や繰り返しが無いので、シンプルに書くことができます。
しかし、非同期で実行される処理がある場合などは、可読性を意識して書かないと、案外メチャクチャになりがちです。(←過去の経験より)

## この記事で学べること
– 順次処理とは?
– 非同期で実行される順次処理を実装する上での課題はなにか?
– 処理フローを追いやすい順次処理の書き方

結論だけ確認したい方は、`「処理フローを追いやすい順次処理の書き方」`から読んでいただければと思います。

## 順次処理ってなに?
指定した順番に沿って順番に実行されていくプログラムのこと

日常生活にたとえてみると、
`朝起きる → 朝食を食べる → 歯を磨く → 着替える → 家を出る`
というような、一連の流れがこれに当てはまります。

とてもとてもシンプルな構造ですので、一見プログラムもシンプルになると思われがちです。

## 非同期処理を含む順次処理の課題とは?
さっきの日常生活のたとえを、

元記事を表示

iOS シミュレーターに写真をドラッグ&ドロップすると PHPhotosErrorDomain エラーが発生する

## 概要

macOS に保存されている写真を iOS のシミュレーターで使う際に、mac から シミュレーターにドラッグ&ドロップすればコピーできるとあったため、実施したところエラーが発生した。

## エラー内容

“`text
One or more media items failed to import:
ファイルパス: The operation couldn’t be completed. (PHPhotosErrorDomain error -1.)
“`

## 解決方法

コピー元のディレクトリー(`xxx`)がダウンロードディレクトリー(`~/Downloads/xxx`)だったため、ホームディレクトリー(`~/xxx`)へ移動したところ解決した。

## 参照 URL

https://developer.apple.com/forums/thread/126307

元記事を表示

ReactエンジニアがReact Nativeを使ってみた

#はじめに
もともとReactを使用してweb開発をしていましたが、React Nativeを使用したモバイル開発に関わることになりました。Reactを使っていた人間がReact Nativeを勉強してみた所感を書きたいと思います。本記事はReact Native公式ドキュメント[[1]]を参考に書いていきます。

#前提
Reactが使える
TypeScriptが使える
モバイルは初めて

環境構築と簡単な動作確認が知りたい人は前回の記事[[1]]で行っているのでそちらを参照してください。

#React Nativeの必要性
現在モバイル端末での使用OSはAndroidOSとiOSで二極化しており、なおかつそれぞれでの使用プログラミング言語も異なります。昔はiOSではObjective-C、AndroidではJavaが使用されていました。しかし、最近ではiOSではSwift、AndroidではKotlinという言語が使われており、2つのOS合わせると最大4つのコードが存在する可能性があるわけです。もちろんこれは開発効率の観点から見て良くなく、これを解決するためにReact Nati

元記事を表示

【Unity】iOSでウィンドウからSafeAreaを取得するプラグインを作る

iOS 15でデバイスを回転させるとScreen.safeAreaが正しい値を返さないことがフォーラムで話題になっています。
>[Unity SafeArea is inconsistent between different starting rotations](https://forum.unity.com/threads/unity-safearea-is-inconsistent-between-different-starting-rotations.1173764/)

Screen.safeAreaが正しい値を返さないのは何年も前からある現象で、UnityとしてはもうFixしたと言ってみたり、また再発したりを繰り返しています。
原因はUIViewのsafeAreaInsetsが正しい値を返さないことにあり、UIWindowのsafeAreaInsetsだと正しかったりします。
どうもウィンドウからビューにイベントの伝達がうまくいってないっぽく、これはUnityの責任というより、Appleの責任ではないかとも思われます。
UnityでiOSビルドしたプロジェクトを探すと、

元記事を表示

RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)

RealityKitでFaceAnchorを使うと、顔より後ろのARオブジェクトが透過されます。

この深度オクルージョンをオフにするには、

“`swift
arView.renderOptions.insert(.disableFaceOcclusions)

// iOS15からは.disableFaceMesh
“`

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKit

元記事を表示

Ubuntu20.04LTSでReact NativeとExpoを試す

#はじめに
React Nativeを業務で使うことになったのですが、Macが届くまでUbuntuでReact Nativeの勉強をする必要が出てきたました。そのためwebやモバイル上での勉強環境構築と動作確認を行っていきたいと思います。

#前提
nodejsをインストール済み
unixコマンドを扱える
Reactが一通り扱える

#環境
nodejs v16.13.0
npm 8.1.0

#React Nativeとは
Facebookが開発したクロスプラットフォームのアプリ開発用フレームワーク。Reactでios、android両方書けて嬉しいよねってやつです。Flutterなども人気が出てきていますが、React NativeはReactの知識をベースにして書けるので、webのノウハウをある程度流用できて開発効率が良いのかなと思います。

#Expoとは
ReactNativeを使ったアプリケーション開発をサポートしているフレームワークです。windows,macOS,Linux関係なくiOS,AndroidどちらもQRコードを介して実機での動作確認が可能です。またwebでの

元記事を表示

アプリのアップデートメッセージを眺めてみた

# はじめに
iPhoneでしばらくアプリのアップデートをしていなかったら、33アプリのアップデートがありました。
アップデートのメッセージを眺めていると、今後の参考になりそうだったので一覧にしてみました。

# アップデートメッセージ
## 日本語
* 細かい調整をしました。
* 機能を改修しました。
* 軽微な修正を行いました。
* 軽微な改修を行いました。
* 軽微な不具合を行いました。
* 軽微な不具合を修正しました。
* 軽微な不具合に対応いたしました。
* 不具合を修正しました。
* 不具合な修正を行いました。
* いくつかの改良や修正をしました。
* 操作性の向上とバグの修正
* UI改善、軽微なバグの改修を行いました。
* バグの修正や安定性の向上などさまざまな改善を行いました。
* 一部不具合の修正とパフォーマンスの改善を行いました。
* 最新バージョンでは各種不具合が修正され、パフォーマンスも向上しています。
* アプリがクラッシュする問題が修正され、機能の読み込み速度が改善されました。
* このアップデートには、操作性および安定性の改善が含まれます。

「軽微な」

元記事を表示

OTHERカテゴリの最新記事