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

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

【Xcode】ファイルを作成する時のSwift FileとCocoa Touch Classの違い

初投稿です。
基本備忘録ですが、同じ疑問を持った方の為になれば幸いです。

今回はXcodeでファイルを作成する時に選択する「Swift File」と「Cocoa Touch Class」の違いをまとめてみました。

結論から申しますと、ファイル作成時にテンプレートがあるかないかだけの違いみたいです。
まず「Swift File」から見ていきましょう。

## Swift File
「Swift File」を作成すると下記のような記述がされたファイルが作成されます。
 ※コメント部分は省略しています。

“`swift
import Foundation
“`

上記のようにこの一行だけ記述されたファイルが作成されます。

## 「Cocoa Touch Class」

次に「Cocoa Touch Class」はどうでしょう。
「Cocoa Touch Class」を作成する場合は作成時にSub class(継承するクラス)を指定する必要があります。
ここではUITableViewControllerを指定しています。
 ※ここでもコメント部分は省略しています。

“`Swif

元記事を表示

【Swift】タイトルのフォントと文字サイズと文字色を同時指定する方法

SwiftでNavigationBarのタイトルのフォントと文字サイズと文字色を同時指定する方法。

同時指定する方法を解説している記事がなかったのでメモとして残しておきます。

## 実装コード

“`swift
self.title = “タイトル”
self.navigationController?.navigationBar.titleTextAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 40),
.foregroundColor: UIColor.white
]
“`
## 参考
https://developer.apple.com/documentation/uikit/uinavigationbar/1624953-titletextattributes

元記事を表示

iPhoneで写真を撮ったら自動的にDropboxに保存されるようにする2 #ヘルスケア #医療

以前こちらの記事でIFTTTを使って、iPhoneの背面カメラで撮った写真が自動的にDropboxで指定したフォルダに保存される仕組みを紹介しました。

https://qiita.com/naokiuc/items/e9850fcb0a93ec1f982e

その後、@tishiyamaさんの[この記事](https://qiita.com/tishiyama/items/62b8e5530414c1853e99)を読みiOSショートカットアプリを使えば簡単に同じ仕組みを実装できることを知り、実装して現場で試したので新たに記事にしようと思います。

今回はじめてiOSショートカットアプを知りましたが、こちらの記事によくまとまっています。

https://time-space.kddi.com/mobile/20210628/3134

#背景
私は訪問診療に携わる医師です。
訪問診療では通院困難な方の家に訪問して診療を行います。
クラウド型のカルテを使用していて、診察の際はプリントアウトしたカルテを持って行き現地で診察しながらカルテを書いて、診察終了後にカルテの写真を撮ってクリニ

元記事を表示

required 修飾子とは

# 用途

– サブクラスに、イニシャライザのオーバーライドを強制するとき
– プロトコルのイニシャライザをオーバーライドするとき

また、

required 修飾子は、イニシャライザ init() でのみ使用可能。

インスタンスメソッドでは使用不可。

# サブクラスに、イニシャライザのオーバーライドを強制する時

## 例:

“`swift
class Animal {
let name: String

//
// A(サブクラスにイニシャライザのオーバーライドを強制するときは、required 修飾子を付ける)
//
required init() {
self.name = “unknown”
}
}

class Cat: Animal {
//
// A をオーバーライド(override 修飾子ではなく、required 修飾子を使うことに注意)
//
required init() {
super.init()
}
}
“`

##

元記事を表示

【Swift】async/awaitはどのようにして動いているのかLLVMのレベルで調べてみる

Swift 5.5によって導入されたConcurrencyのうちの、async/awaitがどのように動いているのか調べてみました。

### きっかけ

私はもともとasync/awaitなどはJavascriptで使っていたので、Swiftに導入されると聞いたときも「ようやく便利になるね」ぐらいにしか思っていなかったのですが、iOSDC2021のこの発表を見たときにたまげました。

特に驚いたのが、`await`式がサスペンションポイント(Suspension point)となり、実行が一時保留されるが、その間もスレッドは別の処理に使用されることや、再開されたときは別のスレッドに回ることもあり得るし、同じスレッドの場合もありうる、という話でした。

しかも、並列する複数のタスク間でのコンテキストスイッチは発生せず、呼び出しのコストのみで実現できるので、並列処理を軽量に実行できるそうです。

「なんでこんなことが実現できるの!?」というのが今回興味を持ったきっかけでした。

私はもともと、Mug

元記事を表示

【Swift】Nearby Interactionを用いたiPhone間の距離と方向を取得するアプリ

# はじめに
「iPhoneとiPhone間」と「AppleWatchとiPhone間」の距離と方向をリアルタイムで取得するアプリを作成しましたので、実装方法を説明したいと思います。
下記のgifは、iPhoneを固定しApple Watchを対角線3mの星形をなぞった際の取得データを、別途可視化したものです。
ソースコードは、こちらの[iPhoneとiPhone間アプリ](https://github.com/MIZUNO-CORPORATION/NearbyInteractionByMultipeerConnectivity)と[AppleWatchとiPhone間アプリ](https://github.com/MIZUNO-CORPORATION/NearbyInteractionByCoreBluetooth)の2種類になります。
使用するフレームワークは[Nearby Interaction](https://developer.apple.com/documentation/nearbyinteraction)で、室内でデバイス間30m程度を数cmの精度で50Hzでデータを

元記事を表示

Yahooハッカソンから本開発し、iOSアプリをリリースするまでの軌跡と、エンジニア人生について考えたこと。

**@kenmaro**です。
普段は主に**秘密計算、準同型暗号などの記事について投稿しています**。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

> – [秘密計算エンジニアを始めて1年が経った。](https://qiita.com/kenmaro/items/416657efca2ff296169b)
– [秘密計算エンジニアを始めて2年半が経った。](https://qiita.com/kenmaro/items/48059dd60f79e80f5ef8)

## 概要と注意
今回は、秘密計算の話ではなく、個人的に友達と取り組んだプロダクト開発について
ポエム的に書いていきたいと思います。

**注意**
**書いているうちにこの記事は完全にポエム化しました。**
**特に技術のことに関しては書かないのでご注意ください。**

## 参加したヤフーハッカソンについて

今年参加したイベントはいくつかありましたが、
その中で二つほど記事として公開しました。

– [秘密計算コンペIDASH2021の出場レポート速報!!Team EAGLYS(Kenmaro

元記事を表示

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の公式ドキュメントではその辺りの制限事項に関する記述は見つけられませんでした。

参考リン

元記事を表示

OTHERカテゴリの最新記事