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

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

Firebase Realtime Database & FireStorageでasync/awaitを利用した簡単な処理実装例の紹介

## 1. はじめに

皆様お疲れ様です。iOS AdventCalendarの17日目を担当させて頂きます、fumiyasac(Fumiya Sakai)と申します。何卒よろしくお願い致します。今週初めに別のAdventCalendarにて、[SwiftUIで作る「Drag処理を利用したCarousel型UI」と「Pinterest風GridレイアウトUI」の実装例とポイントまとめ](https://qiita.com/fumiyasac@github/items/b5b313d9807ff858a73c)という記事も書きましたので、こちらもご覧頂けますと嬉しく思います?‍♂️

以前にお仕事の中でも、Firebaseの機能を活用したアプリ内施策やアプリ内機能を実装する機会も何度かあり、FirebaseについてもSwift Concurrencyにも対応した事で、従来までの処理がasync/awaitを併用してよりシンプルな形で実装できる様になった点は、個人的にも心強く嬉しく思いました。

今回はいつものUI実装関連のTipsとは少し趣向を変えて、Firebaseの機能の中で、これま

元記事を表示

[Swift] 画面遷移時にタブバーを非表示にする

## 前提
MainViewController→TransitionViewに遷移する際に、遷移先のTransitionViewでタブバーを非表示にしたい。
TransitionView→MainViewControllerに戻る際には、タブバーを再表示する。
## 実装内容
navigationViewControllerにTransitionViewをpushする前に、
MainViewControllerのhidesBottomBarWhenPushedをtrueに設定し、
push後にhidesBottomBarWhenPushedをfalseに設定。

“`ruby: TransitionViewに遷移するコード
self.hidesBottomBarWhenPushed = true //push遷移前に設定
self.navigationController?.pushViewController(transitionView, animated: true)
self.hidesBottomBarWhenPushed

元記事を表示

【クソアプリ】傘がいるかどうかを占ってくれます

本記事はクソアプリ Advent Calendar 2022の参加記事になります!

https://qiita.com/advent-calendar/2022/kuso-app

# はじめに
出かける時に雨が降っていたらもちろん傘をさして出かけることでしょう。
一方で現時点では降っておらず、夜の天気が怪しくて傘を持っていくかどうかを悩んだこともあるかと思います。
この時に頼りになるのが天気予報です。
しかしこんなもやもやを感じたことはないでしょうか。
「降水確率30%か。**で、結局傘は必要なの?**」
そうです。
私たちが知りたいのは降水確率ではありません。
**傘がいるかいらないかです。**

今回はこのような不満を持つすべての人の思いを叶えるアプリを作りました。

# アプリの使い方
アプリの使い方は至って簡単です。
ホーム画面がこちら。

ゆめみの次期未経験者向け iOS コードチェック課題をチラ見せ

# 免責事項

本記事はあくまで「チラ見せ」で、本コードチェック課題のリリース時期はまだ未定です。また本記事の内容は正式リリースする際に変更する場合もありますのでご了承ください。正式リリースした時はまたこの記事を編集してお伝えしますので、弊社志望で本コードチェック課題をご希望の新卒や未経験者の方は今しばらくお待ちください。

# モチベーション

弊社の iOS エンジニアコードチェック課題が[変更され](https://speakerdeck.com/lovee/a-brief-description-about-the-new-code-check-for-ios-engineer-in-yumemi-inc)てからはや2年余りが経ちました。おかげさまでこの間多くの方が応募してくださり、弊社の iOS エンジニア採用基準も年々上がってきています。

そんな中また新たな悩みが出てきました。これまでのコードチェック課題は確かに即戦力の中途採用に大きな力を発揮してくれていますが、逆に新卒や未経験者には厳しすぎるのではないか?という問題です。具体的に言うとチームで開発する経験がこれまである

元記事を表示

個人開発アプリに Swift Package Manager を導入してみた

この記事はand factory.inc Advent Calendar 2022 18日目の記事です。
昨日は @y-okudera さんの [Flutterで連続性のある複雑なアニメーションを実装する](https://qiita.com/y-okudera/items/d81715827d01c3509eac) でした。

# はじめに
今回は個人開発しているアプリに Swift Package Manager (以降SPMと記載) を導入した際の記事になります。
これまでは XcodeGen + Carthage を用いており、DataStore層, Domain層, Presentation層の3層を Embedded Framework 化したプロジェクト構成でした。
これらを全て SPM で置き換える事が出来るのでは?と思い移植を試みました。

# 開発環境
– MacBook Pro(14インチ、2021) Apple M1 Max
– Xcode14.1(14B47b)
– Swift version 5.7.1

# XcodeGen, Embedded Frame

元記事を表示

【iOS】SnapKitの概要と実装例

この記事は[レコチョク Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)の18日目の記事となります。

## はじめに

はじめまして。株式会社レコチョクの長島と申します。
2022年4月に新卒で入社し、6ヶ月の研修期間を経て、今はiOSアプリの開発に携わっています。
音楽はダンスミュージックを中心に、最近は電音部という音楽原案キャラクタープロジェクトの曲をよく聞いています。よろしくお願いします。

現在はOJTとして既存アプリのモックを作成する課題を行っているのですが、その際にSnapKitと呼ばれるライブラリを用い、Interface Builderなしで画面を実装する必要があり、一体SnapKitがどういうものなのかを調べる機会がありました。

今回はそれらを調査して得られた結果として、SnapKitの概要と実装例を記事にしようと思います。

### 動作環境

– Xcode 14.0.1
– SnapKit 5.6.0

## SnapKitについて

### 概要

SnapKit

元記事を表示

[SwiftUI] `overlay` を使って配置に優先度を付ける

# 前提
SwiftUIでは、何も考えずにViewを配置すると基本的にセンタリングされて描画されます。
そのため、

“`swift
HStack {
Text(“Foo”)
}
“`

“`swift
HStack {
Spacer()
Text(“Foo”)
Spacer()
}
“`
は同じ見た目になります。
※厳密には異なっておりbackgroundを指定すると分かるのですがここでは割愛します。

では、左右に別のViewを置くとどうなるでしょうか?

色々なパターンを試した結果がこちらです。
※分かりやすいように`background`を付けています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135304/87b504a1-ffcd-193a-4cc3-5b1d71976b5c.png)

# 本題
上の画像から分かる通り中心に置いたつもりのViewが左右(VStackであれば上下)のViewの大きさに応じてズレてしまうことがありま

元記事を表示

Xcode14時代の証明書管理のベストプラクティス

# はじめに

今回はiOSアプリ開発者の頭を悩ませる証明書管理のベストプラクティスについて記事を書こうと思います。

# 結論

まず結論からですが、xcodeの`Automatically manage signing`を有効にして手動での証明書管理をやめましょう!
(所属する組織の人数規模や管理するアプリ数によって状況が異なるため、一概には言えないので詳細は後述する内容をお読みください)

# 前提

この記事を読むにあたっての前提です。

### 想定読者
– iOSアプリ開発に必要な証明書管理の知識がある程度ある人(証明書についての詳細な説明は記載しません)

### 本記事で紹介する手法がマッチする対象者
– 個人アプリ開発者
– iOS開発者が20人程度以下、管理するアプリが数個ほどの小〜中規模組織
– 組織のApple Developer Programアカウント に 開発者個人のアカウントを紐付けて運用可能なこと
– Apple Developer Programアカウントが開発用、ストア公開用などに分かれて運用していないこと

###

元記事を表示

個人デバイスと会社デバイス向けにBoxモバイルアプリのポリシーを分ける

Boxをモバイルデバイスから利用する際、
**「同じユーザーだけど個人デバイス(BYOD)からアクセスした場合はプレビューだけ、会社デバイスからは編集もできる」**
といった制御をMicrosoft IntuneのMAM (アプリ保護ポリシー)と組み合わせて実現する設定例を紹介します。

# Boxモバイルアプリの種類
Boxのモバイルアプリは大きく分けて2種類あります。

* 標準のモバイルアプリ(以下、”標準アプリ”)
* Box for EMM

Box for EMMをMicrosoft IntuneなどのMDM/EMMソリューションから配信することで、**「アクセス元のデバイス制限 (例:会社デバイスからのみBoxにアクセスさせる)」** や、**「アクセス先のBoxテナント制限 (例:個人用Boxアカウントにモバイルアプリから接続させない)」** することが可能となります。標準アプリはBYODなど個人デバイスに、Box for EMMはMDM/EMMで管理された会社デバイスにインストールされて利用されます。Box for EMMについては以下ドキュメントをご参照ください。

元記事を表示

【SwiftUI】Glassmorphismイケすぎでしょ!!

# はじめに
めっちゃかっこいいGlassmorphismをSwiftUIで再現できたので記録しておきます。
再利用できるようにButtonStyleにしてみます。

背景の画像は[こちら](https://jp.freepik.com/free-vector/wave-background-gradient-design_32439901.htm#query=background%20purple&position=6&from_view=search&track=sph)から使用しました

# サンプルアプリ
![simulator_screenshot_BBF0BA45-6769-4E89-8568-C9895A5F85BB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3165fa25-28bc-f642-c832-b563fd3102e2.png)

# 実装
### View
“`swift
import SwiftUI

struct ContentView: View

元記事を表示

flutter_launcher_iconsでandroidとiosのアプリアイコンを登録する

# flutterパッケージ
最近flutterを使っており、なかなか使い勝手が良いと思えてきました。flutterはいろんなパッケージを利用して機能拡張できますが、中でも便利だなと思ったパッケージについて、備忘も兼ねてまとめました。
ちなみに、パッケージとプラグインの違いがわかってなかったのですが、flutterでのパッケージとは「pubspecファイルを含むディレクトリのこと」で、プラグインとはパッケージの一種で「プラットフォームで固有の機能をFlutterアプリに提供するようなパッケージのこと」らしいです。知らずにいると恥ずかしい思いをしそうなのでメモっておきます。

[Flutter/Dart]パッケージ(Package)とプラグイン(Plugin)の違いとは

## パッケージを使ってアプリアイコンを登録
開発を終えアプリをリリースする段階になると、アプリアイコンを用意すると思います。従来の開発環境だと画素数ごとにアイコンを用意したり、osごとに対応したアイコンを用意したりと、なかなか手間がかかる作業だったと記憶してます。
ですが、flutter_launc

元記事を表示

いまさらだけど#fileとかについて(Swift)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![Swift-5.7.1](https://img.shields.io/badge/Swift-5.7.1-brightgreen)

## はじめに
https://qiita.com/uhooi/items/e5ee95c86f8d6734c6a7

こちらの記事を参考に下記のようなテストを書いているときにふと `#line` みたいなやつって `#file` とかあった気がするけど他にもなんかあったけ?と気になりました:thinking:

“`swift
func testHogeWithFlagMethod() {
let testCases: [(line: UInt, flag: Bool, expect: Int)] = [
(#line, true, 0),
(#line, false, 1)
]
testCases.forEach {
XCTAssertE

元記事を表示

iOS App Dev Tutorialsを読んで実際にやってみた。その3

## 前回の記事
 [iOS App Dev Tutorialsを読んでみた。その2](https://qiita.com/shomiya181210/items/b7b44c8d13e0463c49b1) 前回の記事を読んだ後、この記事をご覧ください。
## 今回の範囲
 [Creatng a card view](https://developer.apple.com/tutorials/app-dev-training/creating-a-card-view)
 第3回目はカードビューを作成する。
## 内容の要約
### 1.カラーテーマを作成する。
– Xcodeを開き新しくModelsという新しい新しいグループを作成する。そのグループで新しくTheme.swiftというファイルを作成する。
– 列挙型[enum]を使用して色のカタログを作る。
“`Theme.swift
enum Theme: String {
case bubblegum
case buttercup
case indigo
case lavender
cas

元記事を表示

【SwiftLint】1行だけSwiftLintの対象外にする

# はじめに
「全体には適用したいルールだけど、この箇所だけは例外なんだよな。。。」
この部分だけエラーが出ないようにできないかな。。。

# やりかた
無効にしたいルールの名前を確認します。
![スクリーンショット 2022-12-16 19.29.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1e848e51-c4f8-01aa-2f2c-d02fb288e2b0.png)

対象の箇所に以下のコメントを追加します。
“`swift
// swiftlint: disable 無効にしたいルールの名前
“`

無事無効にできました。

# おわり
これを知って気づいたのですが、SwiftGenは自動で無効にするルールのコメントを追加してたんですねー
優秀〜
![スクリーンショット 2022-12-16 19.33.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8fd79

元記事を表示

iOSはどのようにアプリの表示言語を決めるのか

日本語のみ対応しているFlutterアプリが、Appストア上で「言語:英語、日本語」と表示されて困ってしまいました。

![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13070/af19ab49-3aba-83e9-4944-ae93d89c38e6.png)
(※スクリーンショットはTestFlightアプリなので多言語が表示されるのは正しいのですが、ここにアプリ非対応の英語が表示されて困ったという話です)

解決のため、アプリの表示言語の仕組みを調査しました。

## 結論

Appleの下記サイトに表示言語の決定方法が記述されています。

[Technical Q&A QA1828: How iOS Determines the Language For Your App](https://developer.apple.com/library/archive/qa/qa1828/_index.html)

## iOSはどのようにアプリの表示言語を決めるのか

言語は以

元記事を表示

iOSのUWB通信用フレームワーク「Nearby Interaction」の基礎

# はじめに
スマートフォンの近距離無線通信といえば、みなさん Bluetooth, Wi-Fi, NFC あたりを思い浮かべるでしょう。実はiPhoneでは、UWB(超広帯域無線)というもう一つの無線通信があることをご存知でしょうか。
iPhone11 から iPhone に標準搭載されるようになった Apple U1チップ。Apple製デバイスをUWBに対応させる専用チップで、一般向け製品に UWB が搭載された初のケースです。特に近距離の正確な位置測位に強く、他にはないポテンシャルを秘めています。
しかし、LiDARスキャナの話題性に比べ、こちらはあまり使われているアプリを見ることがありません(Apple公式の「探す」アプリくらい?)。今回はそんな UWB と、Apple の UWB 技術を簡単に使える開発者向けフレームワーク「NearbyInteraction」についてご紹介いたします。

# 目次
– [UWBについて](#uwbについて)
– [UWBとは?](#uwbとは)
– [Bluetoothとの比較](#bluetoothとの比較)
– [

元記事を表示

Flutterでモバイルアプリ開発着手からリリース後まで。【感想】

この記事はリリースまでの一連のざっくりとした流れと感想を述べるにとどまり、年一回あるかないかぐらいの貴重なポエムとなっていることご了承ください。

約2年前の貴重なポエムはこちら

https://qiita.com/MasaoSasaki/items/bcdf9272437bdc6001c5

## 経緯
私はDMM WEBCAMPでRoRを学習したのち、インフラエンジニアに転職しました。
入社後の一年はインフラ系の入門的な資格を取得し、情シスなどを経てインフラ周りの業務知識を広く浅く習得しました。
インフラの知識・経験を得てゆくゆくはいつか開発エンジニアにという意志もあり、ご縁もあって今年の4月に開発職に転職しました。
入社後1ヶ月はLaravelのOJTがあり5月に入ると、上司から「スマホアプリどう?」と唐突に提案があり、少し迷いましたがその日のうちにやりますと返事をして、そこからはFlutterのOJTが始まりました。

余談かつ周りにはあまり言って来ませんでしたが、スクールの卒業前後には開発職になりたいという意志の裏に、Webアプリがある程度作れるようになったらモバイルアプリ

元記事を表示

【Combine】複数の値をまとめて監視する

# はじめに
ログイン画面などで全ての情報が入力されていない場合、ログインボタンを押せなくする動きを再現してみました。
複数の値をまとめて監視する方法を使用することで簡潔に書けたので紹介します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 – 2022-12-15 at 21.16.34.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d0cabd1b-b58e-26fc-b9bd-a39d0d7bba11.gif)

# 実装
### View
“`swift
import SwiftUI

struct ContentView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
NavigationStack {
List {
Section {

元記事を表示

ONLYOFFICEでモバイル文書処理 〜アプリにモバイルエディタを導入する方法〜

紙文書の必要性は、とっくに過去のものです。文書処理のほとんどはデジタル化されています。ユーザーは外出先でドキュメントを扱う必要があるため、文字通り毎日ノートパソコンやデスクトップにアクセスすることなく、モバイルデバイスで文書処理は特に大きな需要を持っているのです。

この記事では、[ONLYOFFICE](https://www.onlyoffice.com/ja/)によるモバイル文書処理を取り上げ、モバイル統合がどのように機能するかをご説明します。

## アーキテクチャと技術スタック

ONLYOFFICE Document Server の通常のアーキテクチャには、以下のコンポーネントが含まれます。

* [server](https://github.com/ONLYOFFICE/server) – バックエンドサーバーソフトウェア層で、他のすべてのコンポーネントのベースとなるもの
* [core](https://github.com/ONLYOFFICE/core) – ファイルフォーマット間の変換を可能にするサーバーコアコンポーネント
* [sdkjs](https://

元記事を表示

OSのバージョン制限があるモディファイアを便利に使う方法(SwiftUI)

## はじめに

本記事は [SwiftUI Advent Calendar 2022 その2](https://qiita.com/advent-calendar/2022/swiftui) の1日目の記事です。

例えば [scrollDismissesKeyboard(_:)](https://developer.apple.com/documentation/swiftui/view/scrolldismisseskeyboard(_:)) がiOS 16.0から使えるように、OSのバージョン制限があるモディファイアを便利に使う方法を紹介します。

## 環境

– OS:macOS Ventura 13.0.1
– Xcode:14.2 (14C18)
– Swift:5.7.2

## 課題

iOS 16.0未満をサポートしている場合、iOS 16.0+のモディファイアはそのままでは使えません。

“`swift:SakatsuInputScreen.swift
struct SakatsuInputScreen: View {
var body: some Vi

元記事を表示

OTHERカテゴリの最新記事