iOS関連のことを調べてみた2022年02月20日

iOS関連のことを調べてみた2022年02月20日
目次

[iOS] (社内アプリ等で)限定的にアプリを配布する方法をまとめてみた

# 前提知識

## Apple Business Manager(ABM)

– Appleデバイスやアカウントを管理し、Mobile Device Management(MDM)による管理をサポートするための公式サービス。
– 法人であれば、無料で登録・利用可能。
– MDM製品と連携して利用するサービス。
– 実際に端末に適用させる設定を作るのがMDMで、配布するアプリを入手したり、端末を組織の所有物として紐付けたりしてMDMによる管理をサポートするのがABM。

**参考リンク:**

法人のiOSデバイス管理必携?Apple Business Manager総まとめ!

**公式ドキュメント:**

https://support.apple.com/ja-jp/guide/apple-business-manager/welcome/web

※教育期間向けには同じ位置づけで[Apple School Manager(ASM)](https://support.apple.com/ja-jp/guide/apple-school-manager/welcome/web)がある。

#

元記事を表示

WidgetKitで天気予報アプリ作ってみた〜タイムライン作成編〜

## 投稿の経緯
前回投稿した『WidgetKitで天気予報アプリ作ってみた〜Widget Extension追加編〜』の続編です。
今回はウィジェットで使うデータを作成するタイムラインを開発していきます。

前回の記事を見てない方は先に↓こちら↓を確認してください。

https://qiita.com/nkekisasa222/items/744754523172035cc9bf

## 環境
Swift 5.5
Xcode 13.2.1

## サンプルプロジェクト
GitHubにPushしています。気になる方はご覧ください。
https://github.com/ken-sasaki-222/WeatherWidget
![QR_615642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/8c43013f-9757-f7dd-5946-2684f30f63b7.png)

## AppGroupsの追加
UserDefaultsに保存したデータを「Widget Exte

元記事を表示

iOS / Android のロケールID一覧

端末の地域と言語の設定は、アプリでは Locale として観測できますが、Locale ID を網羅した最新のリストが見当たらなかったので CSV ファイルを作りました。数年前のデータは Google 検索すると見付かるのですが、広東語とかが入ってないんですよね。

# CSV ファイル

– iOS版 [ioslocaleidentifiers.csv](https://gist.github.com/okaxaki/e355b3784983edc8b357f48e92b0e69c)
– Android版 [androidlocaleidentifiers.csv](https://gist.github.com/okaxaki/fc4fa7c96812de6444cffdbeaa9d647f)

# 製法
iOS は NSLocale の availableLocaleIdentifiers と localizedStringForLocaleIdentifier を使って、次のコードをビルドし、iOS 15.1 端末実機で動かして取得しました。OSバージョンが違うと結果は変わりま

元記事を表示

iOS15以降では空セル挙動を切り替えるのにfillerRowHeightを使おう

iOS15の[UITableView](https://developer.apple.com/documentation/uikit/uitableview)では、ついに「空セルが表示されない」挙動がデフォルトになりました。以前は空セル表示がデフォルトだったため、それを消すために

“`swift
tableView.tableFooterView = UIView(frame: .zero)
“`

のようなワークアラウンド実装を行なった開発者の方は多いのではないかと思います。

しかし、iOS15の挙動変更は[tableFooterView](https://developer.apple.com/documentation/uikit/uitableview/1614976-tablefooterview)のデフォルト値が空ビューになったの**ではなく**、空セルの挙動が新しい[fillerRowHeight](https://developer.apple.com/documentation/uikit/uitableview/3801921-fillerrowheigh

元記事を表示

【Swift】Combineで作るアプリのテストコードを書いてみた

## はじめに
`Combine`を使った通信まわりのテストコードの情報がまだ少ないように感じましたので、作ったサンプルアプリのコードを載せてみようと思い、書いてみました。
今回のアプリのアーキテクチャは、MVVMです。

## この記事でわかること
– `Combine`で`URLSession`を使ったリクエストを書いたときのテストコードの書き方
– MVVMで実装したときのテストコード

Modelのテストよりも、個人的にはViewModelのテストのほうが、`Combine`特有の実装が必要だと思うので、ViewModelの方が重要かなと思います。

## Model層のテスト
今回のModel層は、実際にAPIに対してリクエストするところが該当します。
コードには、すべて`Combine`をimportしてください。

#### アプリのコード
“`swift
protocol GithubAPIClientProtocl: AnyObject {
func searchRepositories(searchWord: String) -> AnyPublisher

元記事を表示

SwiftUI(MVVM)+async/awaitのサンプルコード

Swift5.5の新機能である async/await を利用したサンプルコードを書いてみました。

## サンプルコードの概要
* SwiftUI製アプリ
* MVVMアーキテクチャ
* リポジトリ:https://github.com/wakamori-k/SwiftUIConcurrency

以下にて、Model、ViewModel、Viewの順に実装を紹介します。

## Model

Modelには、非同期で実行されることを意味する`async`キーワード付きのメソッド(以後、asyncメソッド)を定義します。サンプルコードのModelでは、GitHubのAPI(ランダムに設計思想の文字列を返すAPI)を叩き、そのレスポンスを非同期で返却するasyncメソッド`fetchDesignPhilosophy()`を定義しています。

“`swift
final class Model {
private let urlString = “https://api.github.com/zen”

// APIのレスポンスを非同期で返すため、asyncで定義

元記事を表示

MRTK2.7.3 + AzureSpatialAnchorsSDK2.12をHoloLens2、Android、iOSで動かす

# 環境
– Windows10 PC
– iPhone 12 Pro
– HoloLens2
– Android 10
– Unity 20203.4f1

# Azure
Azureポータルにログイン
Spatial Anchors Accountsにアクセス
各種値を入力して作成
下記値をメモしておく。
Account ID , Account Domain , Access Key

# Unity
Unity HubからProjectを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/b0fce247-6776-c2e2-02d0-21017ad665cf.png)

[MixedRealityFeatureTool](https://docs.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool)を起動しProjectPathを指定
![image

元記事を表示

プログラミング未経験から始める!Flutterでアプリ開発【ios/android】

こんにちは。長谷川です。この記事では、自分の勉強もかねて、Flutterを使ったアプリ開発をなるべく易しく解説していくので、ぜひ最後までお付き合いいただけますと幸いです。
また、私自身こういった解説記事を書くのは初めてなので、至らぬ点は多々あるかとは思います。ぜひコメントで意見いただけると幸いです。

##この記事の対象

今まで全くプログラミングしたことないけどアプリ開発してみたい人、です。プログラミングは専門用語や英語が多くて億劫。。という方も、丁寧に用語解説をしながら記事を書いていくので安心して読み進めてみてください。

##必要なもの

1、windows10以降搭載のパソコン or Mac
2、アプリを作りたいと思う熱意?大事!!

##習得までのロードマップ

lesson0 : Flutterって?アプリ開発って?
lesson1 : とりあえずプログラミングする環境を作ってみる。
lesson2 : Dart言語を学習しよう。
lesson3 : オブジェクト指向プログラミングを学習しよう。
lesson4 : Widgetの使い方
lesson5 : Coming S

元記事を表示

iOS 15.4におけるSharePlayに関するアップデート(FaceTimeをアプリから開始など)

以前の記事で、FaceTime参加者間でのデータ共有に向けてiOSアプリ内でSharePlayを統合させることについての完全ガイドを紹介しました。

https://qiita.com/MaShunzhe/items/aeeef55c8d5d66ee63d9

この記事は次の事柄を取り上げます:
– アプリ(iOS 15.4以降)から直接FaceTime通話をかける
– シェアシート上のSharePlayオプション
– SharePlayセッションを終了または退室
– システムUIメッセージを伝える

## アプリ(iOS 15.4以降)から直接FaceTime通話をかける

iOS 15.4 (現在ベータ版の段階) では、グループFaceTime通話を始めたい場合にもし進行中のFaceTime通話が無ければ、ユーザーを招待して通話を開始することができます。

システムがFaceTime参加者の提案リストを提示してくれて、連絡先アプリから招待する人を選び出すことができます。

【iOS】制約ベースのアニメーションで簡単にアニメーション実装

#はじめに
iOSでアニメーションを使うときは今までCoreAnimationをメインで使っていましたが、制約ベースのアニメーションでも簡単に綺麗なアニメーションが作れることを知って目から鱗だったので、自分なりにまとめたいと思います。

~~※投稿した後に気づきましたがGIFがクリックしないと動かないので修正中です。~~

#アニメーションの種類
+ CoreAnimationを使ったアニメーション
+ 制約ベースのアニメーション

おそらく他にもあるのでしょうが、今回は上記2つに焦点を当てて違いを説明します。

#CoreAnimationを使ったアニメーション
ca_architecture_2x.png
出典: [Core Animation Programming Guide](https://dev

元記事を表示

共通パーツはどのように共通化すべきなのか?(UIView)

![Xcode-13.1](https://img.shields.io/badge/Xcode-13.1-brightgreen) ![Swift-5.5.1](https://img.shields.io/badge/Swift-5.5.1-brightgreen) ![iOS-15.0](https://img.shields.io/badge/iOS-15.0-brightgreen)

## はじめに
アプリを作っているときに複数画面で同じような表示をみかけると共通のカスタム View として切り出すことがよくあります。

しかし、安易に共通化すると後々の仕様変更時に痛い目にあう可能性があります。痛い目にあわないように共通のカスタム View はどのように作るべきなのか考えたいと思います。
(明確な答えがあるわけじゃないのでポエムのようなものです:innocent:)

## 事象
添付のような画面があった場合、下部の金額表示部分は同じなので共通化したくなるはずです。

|画面A|画面B|
| — | — |
|![screen_a](https://user-im

元記事を表示

iOS15/Safari html要素にposition: fixedを設定した状態でlandscapeへ画面回転するとinnerHeightがアドレスバー分小さくなる

##タイトル通り
iOS15/Safariにて
html要素に`position: fixed;`を設定した状態でlandscapeへ画面回転すると、
アドレスバーが非表示であるにもかかわらず、「innerHeightがアドレスバーが表示されている時の値になってしまう」バグがある。
ちなみに本記事はただの備忘録です。

##どうしたか
innerHeightを使用せず100vhを使用したところ、計算上は正しい値が得られたものの、
innerHeightを超過した分は見切れてしまった(winodw外ということ?)ため、
html要素から`position: fixed;`を外すことでしか対応できなかった。

元記事を表示

【個人開発】メモアプリのiOS版をリリースした話【Flutter】

## はじめに
Flutterで開発したメモアプリのiOS版をリリースしました。android版から遅れて約2か月くらいです。android版リリース時の記事は[こちら](https://qiita.com/taki0010/items/c38827089ef04d01c91a)。

今回は、android版リリース後に必要だと感じた機能を実装するために利用したパッケージなどを中心に書きたいと思います。

https://play.google.com/store/apps/details?id=com.karas.notespod

https://apps.apple.com/jp/app/notespod/id1600436936


### receive_sharing_intent [→](https://pub.dev/packages/receive_sharing_intent)
この **Notespod** は、メモにいろんなデータを添付できるアプリです。ストレージ内のデータについては`file_picker` のようなパッケージで持って来ればいいんですが、

元記事を表示

CoreMLの画像出力をプレビューできるようにする

#ファイルだけでプレビューできるようにする方法です

![スクリーンショット 2022-02-17 10.49.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/f0dc7473-05d1-aa27-d2bd-84b524cfb367.png)

#画像プレビューはどうやるの?
CoreMLの出力を画像タイプにすると、ファイルを開いたときにプレビュータブが現れ、プレビューできるようになります。
しかし、画像をドロップしてみると、インディケーターが回り続けてStylized画像が表示されない場合や、
ノイズのような画像が表示されるなど、うまくプレビューできない場合があります。
何が間違っているのでしょうか?

#画像の出力形状の並べ替えや非正規化が必要

例えば、モデルの出力形状が[1,256,256,3]の場合、
CoreMLファイルがプレビューできるRGB画像の形状は[3,256,256]なので、形状を並べ替える必要があります。

“`swift
spec = mlmodel.get

元記事を表示

Autoresizing MaskになっているとAutolayoutが効かない

Autolayoutで左右の制約を設定したが、Viewの幅が制約通りにリサイズされず、小さいデバイスだと画面からはみ出してしまった。
原因を探っていくと、インスペクターで該当ViewのLayout設定が`Autoresizing Mask`になっていたところを、`Inferred(Constraints)`にすると、意図通りに表示されるようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37598/977ce0d7-cb39-3a22-b8cd-13cecb3453bb.png)

Webで漁っても解決策に行き着かなかったが、これは常識の範囲なのだろうか。

元記事を表示

【Swift】撮影した動画からサムネイル画像を取得

#はじめに
今回のタイトルは撮影した動画からサムネイル画像を取得としていますが、
私がこの記事で伝えたいのは取得方法よりも注意点についてです。
こちらを実装される方は知っておいた方が良いです。
又、こちらは動画の一番最初のフレームをサムネイルにする場合の実装です。

#実装

“`swift

private func setThumbnail() {

guard let url = URL(string: videoUrl ) else { return }
let asset = AVAsset(url: url)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true

do {
let thumbnailCGImage = try generator.copyCGImage(at: asset.duration, actualTime: nil)

元記事を表示

【Swift】カスタムViewとViewControllerの作成

# はじめに
xibを使って、レイアウトはViewに、イベントはViewControllerで処理する場合のシンプルな実装方法を紹介します。
# ゴール(完成図)

xibを使って、ViewControllerにカスタムViewを表示させる。
※青背景色の部分がUIViewController、白背景色の部分がUIView。
おおまかな開発の流れとしては、ViewControllerにViewを埋め込む感じです。

# 1.カスタムUIView、UIViewControllerのswiftファイルと、それに紐付くxibファイルの作成
– UIViewはSwiftとViewファイル別々に選択して作成する必要があり、UIViewControllerはcocoaTouchClassでxibファイルを一気に作成することができます。

元記事を表示

「The Ultimate Guide to WKWebView」をSwiftUIで実装する #07 – Monitoring page loads –

[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
7つ目になります。

15まであるので、大体半分まできました! ?

今回はKVOだとか、SwiftUIのProgressViewだとか、WKWebViewのメソッドだとか
使ったことがないものが多くて自分には重めだった・・・

## 目次

シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないタイトルは、記事作成中または未作成のものになります。

|#|タイトル|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa587831c1be0)
(フルスクリーンのWebViewを作る)|
|02|[Loading re

元記事を表示

SwiftUI + FlowController パターンの提案

## コンセプト

![concept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/87f3e9dd-c69e-9113-5f81-b901774548c3.png)

## モチベーション

**アプリを SwiftUI ベースで作りたい!**
**……けど、危険な香りもするので UIKit に逃げられる余地を残しておきたい**

### SwiftUI

SwiftUI が発表されたのが WWDC2019 なので、今年 2022 年で登場から約 3 年。
ネットを徘徊すると実際のプロダクトへの導入例もだいぶ見かけるようになってきました。

実際に SwiftUI を触ってみると、宣言的 UI によるコード記述量の削減やコンポーネントとしての再利用性の向上、Canvas を利用したプレビューによる開発体験といったあたりは確かに素晴らしいのですが、実際にプロダクトに導入すると個人的には色々と不安な印象です。

特に気になるのが、

– 画面遷移周りの制限
– プッシュ遷移での `

元記事を表示

[Swift]なぜIdentifiableつけるの?

#この記事を書いた理由
現在Swift UIの勉強をしていますが、Listを作成する機会がとっても多い。
その中で頻出するIdentifiableについて、「頻出だけどあまり理解できていない・・・」と思っていたので、1人でも私と同じような人がいなくなればと思って今回記事にまとめています。
まだ勉強中なので間違えていましたらご指摘いただけますと幸いです。

#目次
[1.Identifiableとは?](#Identifiableとは?)
[2.Identifiableが無い時のエラーについて](#Identifiableが無い時のエラーについて)
[3.実装してみる](#実装してみる)
[4.まとめ](#まとめ)

#Identifiableとは?
そもそもIdentifiableとは何でしょうか。
結論から言うと、**構造体に準拠するコンテンツにidを振ることを可能にするプロトコル**です。

まだちょっとわかりにくいですよね。
順を追って説明していきます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
プロトコルについての記事はこちら → 現在作成中
構造体に

元記事を表示

OTHERカテゴリの最新記事