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

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

FlutterでTodo管理dAppを作る

# やること
[web3dart](https://pub.dev/packages/web3dart) / [Truffle](https://trufflesuite.com/) / [Ganache](https://trufflesuite.com/ganache/) を使って簡易的なtodo flutterアプリを作成します。
スマートコントラクトのイベントをsubscribeする実装サンプルがあんまりなかったためそこも含めてやってみました。
Web3初心者のため、間違っていることを言っている可能性がありますのでご容赦ください。
また動作確認はAndroidのみで行っています。

# 作るもの
![dapp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95489/071d19de-800d-ff46-d53a-0e6cb03d3dce.gif)

# 概要
全体像を把握できてなかったので整理しました。
![arch.png](https://qiita-image-store.s3.ap-

元記事を表示

【SwiftUI】リマインダーを自作!作成手順と開発方法

Appleから提供されている通知アプリ**リマインダー**に似たアプリを個人的に自作してみました。

とはいえ本家にはだいぶ劣りますがシンプルさを活かして作成しています。

![892BB750-91EF-46EB-902D-79BE4FF2BF42.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/01006f08-50dc-a7ec-c210-e1124910cfb7.jpeg)

![F11F449D-11C6-4996-8098-FA90F111139F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/d96845a6-c23e-1b67-cdce-4a7fe15d5953.jpeg)

# 個人開発でリマインダーを自作してみた

今回作るのは**シンプルさを売りにしたリマインダー**です。組み込む機能はできるだけ少なく、誰でも**直感的に使用方法がわかるようなアプリを意識*

元記事を表示

Appleの審査で「Sign in with Apple」がなくてリジェクトされた話(Guideline 4.8 – Design – Sign in with Apple)

GoogleやTwitterなどのサードパーティを利用した認識機能を実装したiOSアプリを審査提出しましたが、下記の理由でリジェクトされました。

https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple
“`
Guideline 4.8 – Design – Sign in with Apple

Your app uses a third-party login service, but does not offer Sign in with Apple. Apps that use a third-party login service for account authentication need to offer Sign in with Apple to users as an equivalent option.

Next Steps

Please revise your app to offer Sign in with Apple as an equivalent op

元記事を表示

[Xcode]Coverage.profdataの中身を見る

## はじめに
今回、Coverage.profdataの中身を見る方法について調べたので、備忘録として記事を書きます。
実際には、中身を見るというよりllvm-covコマンドを使って、ターミナルでパーセンテージを表示する方法です。
## llvm-covを使ってカバレッジを表示
llvm-covのreportコマンドを使うことで、Coverage.profdataのカバレッジを見ることができます。
ターミナルで以下のコマンドを実行します。
“`
$ xcrun llvm-cov report -instr-profile {Coverage.profdata} { 〇〇.app/〇〇 }
“`
上記のコマンドを使うことで、カバレッジをターミナルに表示することができます。

## 実際のプロジェクトでコマンド実行
![スクリーンショット 2022-10-24 21.47.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1379778/c71699be-74f4-2886-aa0c-59ecd5f

元記事を表示

【SwiftUI】DisclosureGroupを使ってみた

# はじめに
おそらくiOS14で追加された`DisclosureGroup`を初めて触ってみたので記録しておきます。

# どんな動きをするものなの?
![Simulator Screen Recording – iPhone 14 Pro – 2022-10-24 at 19.09.35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/72226f8f-0ba4-fa41-3b1a-fd419737240e.gif)

# 実装
`DisclosureGroup`でネストしていく感じですね。
とてもわかりやすいです。
“`swift
import SwiftUI

struct ContentView: View {
@State var sliderValue: CGFloat = 50.0
var body: some View {
List {
DisclosureGroup(“メニュー”) {

元記事を表示

[iOS] [UIKit] async/awaitとCombineを利用したMVVMアーキテクチャのサンプル

# 前書き

私が最近参画したプロジェクトにおいて、MVVMアーキテクチャを採用しました。
その構造をイメージしたサンプルコードを共有します。

特に、
**async/awaitとCombineを利用することで、MVVMをiOS12以前よりもシンプルに実現できるようになった**
という点を共有したいです。

前提環境:
・Xcode 14.0.1
・Swift 5.7
・iOS 13以降

# Cocoa MVCとMVVMの違い(責務分割のイメージ)

## Cocoa MVC

![スクリーンショット 2021-02-06 8.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122917/ad32b5f2-84fe-8088-722d-58ddcb54c18e.png)

## MVVM

![スクリーンショット 2021-02-06 8.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12291

元記事を表示

【Swift】チュートリアルライブラリ使ってみた

# はじめに
チュートリアルを作成できるライブラリを使ってみたので基本的な使い方を紹介できたらと思います。

↓↓リポジトリはこちら↓↓

https://github.com/ephread/Instructions

# どんなライブラリ?
![Simulator Screen Recording – iPhone 12 – 2022-10-23 at 20.24.57.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/47bc24dd-03da-7b8a-cf8f-5c16bf1ac7c7.gif)

[こちら](https://apps.apple.com/jp/app/swipe-counter/id6443832677)のアプリで使用しているので是非インストールして実際に触ってみてください!

# 基本実装
“`swift
import UIKit
import SnapKit
// Instructionsをインポート
import Instructions

// Coac

元記事を表示

モバイルアプリの自動テストツールShiratesを使ってみよう(その2)

本記事はOSSの自動テストツール **Shirates(シラテス)** の紹介記事です。
[前回](https://qiita.com/wave1008/items/13e0c854002f6a58f354)の記事ではOSSの自動テストツールである**Shirates**を使うための環境構築とテストコードの実行方法について説明しました。

今回はAppiumと**Shirates**でどのような違いがあるのかをサンプルコードを使用して確認します。
**Shirates**はAppiumをドライバーとして使用していますが、Appiumの使いにくさを解消するための工夫が多数盛り込まれていることがわかります。

## サンプルコードの入手
まずはGitHubからサンプルコードを入手してください。

https://github.com/wave1008/shirates-samples-introduce1

ダウンロードしたプロジェクトのディレクトリ下に複数のサブプロジェクトがあります。
![image.png](https://qiita-image-store.s3.ap-northe

元記事を表示

【Swift】CaseIterableを使って列挙型の配列を取得する

# 実装
“`swift
enum WeatherCondition: String, CaseIterable {
case sunny
case cloudy
case rainy
}

print(WeatherCondition.allCases)

// [プロジェクト名.WeatherCondition.sunny, プロジェクト名.WeatherCondition.cloudy, プロジェクト名.WeatherCondition.rainy]
“`

# おわり
今回のサンプルは数が少ないのであんまり意味がないように思えますが、[TwitterAPIのエラーコード](https://qiita.com/SNQ-2001/items/604559ee38227cc134a3)のように大量にある場合は今回の方法が有効です。

元記事を表示

【Swift】端末の傾きを取得する

# はじめに
https://apps.apple.com/jp/app/%E6%B0%B4%E6%BA%96%E5%99%A8/id1621303604

以前、水準器を作成した際に使用した`CoreMotion`を使ってサンプルアプリを作ってみます。
簡単に端末の傾きが取得できるので是非試してみてください!

# 実装
“`swift
import SwiftUI
import CoreMotion

struct ContentView: View {
private let motionManager = CMMotionManager()
@State private var x: Double = 0.0
@State private var y: Double = 0.0
@State private var z: Double = 0.0
var body: some View {
VStack(spacing: 50) {
Text(“x: \(x)”)
Text

元記事を表示

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

## 前回の記事
 [iOS App Dev Tutorialsを読んでみた。その1](https://qiita.com/shomiya181210/items/5b6d261938f650509255) 前回の記事を読んだ後、この記事をご覧ください。
## 今回の範囲
 [Using stacks to arrange views ](https://developer.apple.com/tutorials/app-dev-training/using-stacks-to-arrange-views)
 第2回目は実際にXcodeを使って会議タイマーの画面を作成してみる。
## 内容の要約
### 1. プロジェクトを新規作成する
####  Xcodeを開き新しいテンプレートを作る。
    SUI_010-010-020@2x.png[Swift] クロージャについて理解する

Qiita初めての投稿になります。Swift初学者Yasuと申します。
Swift学習歴5ヶ月ほどの初学者ですが、
自身の学習アウトプット、整理も含め投稿始めました。
今回はクロージャについてまとめました。

## クロージャとは
#### 処理を定義しつつ、周りのデータを取り込んで、後から実行できるもの。
みたいなイメージです。

初めはあまりピンとこないかと思いますが、
この記事を読み終える頃にイメージが湧いてると嬉しいです。

# クロージャの定義方法
“`closure.swift
{ (仮引数: 型,…) -> 型 in
文…
}

//関数の場合と比較
func 関数名(仮引数: 型,…) -> 型 {
文…
}
“`
こうして見て見ると、クロージャと関数の共通点がいくつかあるのが分かりますね。
クロージャと関数を見極めるポイントとしては、
– funcキーワードの有無
– 関数名の有無
– inの有無
– {}の位置

# クロージャを実行してみる
“`
//cにクロージャのイ

元記事を表示

【Swift】ループ内を並列処理する

# はじめに
DispatchQueueを使用しての並列処理の例はいくつも出てきますが、Swift Concurrencyでの並列処理の例はなかなか見つからなかったので記事にしておきます。

# DispatchQueue
“`swift
func sample1() {
let dispatchGroup = DispatchGroup()
let dispatchQueue = DispatchQueue(label: “sample”, attributes: .concurrent)
for i in 0..<10 { dispatchQueue.async(group: dispatchGroup) { Thread.sleep(forTimeInterval: TimeInterval(Int.random(in: 1...10))) print(i) } Thread.sleep(forTimeInterval: 1.0) } } ``` #

元記事を表示

Luma AIのスキャンシーン和訳

# はじめに
この記事は現在(2022/10/20)TestFlightで配信されている、ベータ版Lumaの記事になります。

https://lumalabs.ai/

ホームページの`waitlist`より、ベータテスターの申し込みができるので、興味のある方はぜひ応募してみてください。

# 内容

> Align the crosshair to the object you wish to scan and tap on screen.

スキャンしたい対象物に十字を合わせ、画面上をタップします。

【Flutter】iOSでバックグラウンドオーディオがうまく機能しない

audioplayers0.20.1 を使ってオーディオをバックグランドで再生しようとすると、iOSでうまく機能しない。
解決策が見つかったので書き残します。
“`info.plist
UIBackgroundModes

audio

“`
info.plistに上記を追加します。

“`Swift:AppDelegate.swift
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRe

元記事を表示

iOS App Dev Tutorialsを読んでみた。その1

## この記事を始めた理由
AppleがiOSのチュートリアルを出していたので、これを全部やってアプリが作れるか試してみた。

## 今回の範囲
[Getting started with Scrumdinger ](https://developer.apple.com/tutorials/app-dev-training/getting-started-with-scrumdinger)
第1回目は今回やっていくチュートリアル、Develop apps for iosの概要を理解するための概要を読んでまとめてみる。

## 内容の要約
### 1. このモジュールについて
*  このチュートリアルではSwiftUIを使用する。
*  このチューとリアルでSwiftUIの基礎を学ぶ。

### 2. SwiftUIの概要
*  SwiftUIはあらゆるAppleのアプリ基礎を構築するための言語。
*  SwiftUIを使えばより早くより正確にエラーを少なくアプリを
作成することができる。
*  宣言的な構文でシンプルなSwiftを使用して画面に映される内容
を決定する。
*  構成的

元記事を表示

iOSアプリ配信時の流れ

## 前書き
2年前くらいにiOSアプリ開発した際にアプリ配信するまでの流れをすんなり理解できず、
いろいろ調査してまとめた資料を公開してみようと思い立ちました。

## 本題
資料といっても1枚絵にまとめた俯瞰図です。
個人で調べてまとめたものなので誤りがあるかもしれません。
また、配信方法に関してはよく変更されるようなので正確な情報は公式ページを参考にしてください。

![iOSアプリ配信方法俯瞰図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488612/a62af872-5b79-476d-3694-20951ce38aa0.png)

#### 用語補足
* Apple Developer Program(ADP):個人または企業が登録可能なメンバーシップ

* Apple Developer Enterprise Program(ADEP):企業のみが登録可能なメンバーシップ

* Apple Developer:アプリ開発に必要な機能を提供する無料Webサービス(ADP/ADEP必須)

元記事を表示

【Swift】Alamofireでasync/awaitを使う

# はじめに
「alamofire async」で検索すると`withCheckedThrowingContinuation`を使ってasyncを使用している記事が多く出てきますが、実は標準でasync/awaitを使えるみたいです。
今回はそのやり方を紹介できたらと思います。

# やりかた
### String
“`swift
let response = await AF.request(url, method: .get, headers: headers).serializingString().response
switch response.result {
case .success(let data):
print(type(of: data)) // String
case .failure(let error):
print(type(of: error)) // AFError
}
“`

### Data
“`swift
let response = await AF.request(url, method: .get, headers:

元記事を表示

dSYM Uploadが失敗する | dSYMが不足している

# Problem(s)
– 最新のXcodeではビットコードが非推奨になりビットコードをアップロードしなくなったアプリはApp StoreからdSYMファイルをダウンロードできなくなりました。CIでfastlaneの`download_dsyms`を使っている場合や手動でdSYMがダウンロードできなくなるとFirebase Consoleで「dSYMが不足している」とエラーが出てクラッシュログが見にくくなります。
– Firebase SDKに内包されているスクリプト`run`を使ってdSYMを直接Firebase Consoleにアップロードする方法がありますがこの方法には現時点でバグがありdSYMを探し出せない場合があります。

実際に多くのプロジェクトでdSYMの運用が一時的にXcodeから手動アップロードになっているのではないでしょうか?

# Solution

以下のURLが参考になります。

https://minidev.dev/blog/2022/09/30/upload-dsym-to-firebase-crashlytics-with-xcode-14/

元記事を表示

【Swift】Alamofireでカスタムレスポンスを作成する

# はじめに
AlamofireでAPIを叩いて`responseDecodable(of: StatusesShow.self)`でデコードされた結果を受け取る。
今までこの方法で使っていました。
この時返ってくる値は`Result`です。

例えばTwitterのAPIを叩いたとしましょう。
[TwitterError](https://qiita.com/SNQ-2001/items/604559ee38227cc134a3)を使いたいと思うとこのように美しくない実装になります。
“`swift
AF.request(url, method: .get, headers: headers).responseDecodable(of: StatusesShow.self) { response in
switch response.result {
case .success(let data):
print(data)
case .failure(_):
guard let d

元記事を表示

OTHERカテゴリの最新記事