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

iOS関連のことを調べてみた2023年01月26日
目次

【SwiftUI】SwiftUIでライフサイクルを定義したい。AppDelegateしたい。

# 概要
– SwiftUIでもUIKit時代のアプリのライフサイクルを決めておきたいなと思う
– 当たり前のことだけどメモ

# ソースコード
1. やり方は簡単。まず、AppDelegate.swiftを作成。
1. 以下のように、AppDelegateクラスを継承する(今回は通知の許可リクエストをアプリ起動時にやってほしいことを想定)。

“` swift: AppDelegate.swift

import UIKit

class AppDelegate: NSObject, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// 通知の許可リク
let cent

元記事を表示

【Swift】guardってむずくね

# はじめに
guard文を使用していて「!?」と思ったことがあったので記録しておきます。

# パターン1
このパターンは`url`の`nil`チェックをしています。
`nil`の場合はelse節が実行され、`nil`でない場合は下に処理が移ります。
この例では`url`は`nil`なので`print(“❌: URLが見つかりませんでした”)`が実行されます。
“`swift
let url: URL? = nil
guard let url else { return print(“❌: URLが見つかりませんでした”) }
print(“✅: \(url)”)
“`

# パターン2
このパターンは`bool`の真偽チェックをしています。
`false`の場合はelse節が実行され、`true`の場合は下に処理が移ります。
この例では`bool`は`false`なので`print(“❌: false”)`が実行されます。
“`swift
let bool: Bool = true
guard bool else { return print(“❌: false”) }
pr

元記事を表示

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

## 前回の記事
[iOS App Dev Tutorialsを読んでみた。その3](https://qiita.com/shomiya181210/items/f9f122fab2db17f2011f)
前回の記事を読んだ後、この記事をご覧ください。
## 今回の範囲
[Displaying data in a list](https://developer.apple.com/tutorials/app-dev-training/displaying-data-in-a-list)
4回目はリストにデータを表示させる。
## 内容の要約
### 1. デイリー スクラムのリストを表示させる.
– ScrumsView.swiftという新しいSwiftUI Viewファイル作成します。
– scrumstypeという定数を追加する。
“`ScrumsView.swift
let scrums: [DailyScrum]
“`
– Daily Scrumを初期値にする。。
“`ScrumsView.swift
ScrumsView(scrums: DailyScrum.sampl

元記事を表示

NavigationBarのカスタムBackボタンの見た目をデフォルトと合わせる

デフォルトのBackボタン(アイコンのみ)と見た目をほぼほぼ合わせることができたのでメモ。

Backボタンタップ時にアラート表示したいときなどにBackボタンの見た目を変えずに対応できるようになります!

| Default | Custom |
| —- | —- |
| ![Simulator Screen Shot – iPhone 8 – 2023-01-25 at 19.38.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179737/d346cb55-42ee-09e5-3d5a-d1796c9f45ee.png) | ![Simulator Screen Shot – iPhone 8 – 2023-01-25 at 20.04.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179737/3a5cc366-2db1-f40f-18bc-9208c3ee71e6.png)

元記事を表示

歩数を取得するならHealthKitと加速度センサーどっちがいいの?

先日投稿したGooglefitと加速度センサーに引き続き、今度はiOSでの歩数取得について書きたいと思います。

## iOSならHealthkit?それとも加速度センサー?

**加速度センサーとは?**

(これは前回とほぼ同じ内容です。)
スマートフォンの動きを検知する仕組みのことです。
iPhoneは端末のx,y,z軸それぞれを計測する加速度センサーを内蔵しています。
私がテストしたアプリだと、端末を軽く振るだけで歩数を増やすことができていました。

**HealthKitとは?**
iPhoneユーザーの方はみたことがあると思いますが、iPhoneに標準装備されている健康管理アプリです。

![スクリーンショット 2023-01-25 17.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629197/6d5ed898-d4d9-d69e-b138-2ff9bd084bd5.png)

アプリ内には下記のような機能が搭載されています。
・歩数データの取得
・心拍数や睡眠のデータ収

元記事を表示

プロジェクトで行ったVoiceOver対応

# はじめに

2021年6月に障害者差別解消法の改正により、民間事業者でも義務化され、公布から3年以内に対応が求められるようになりました。
そのため、自分の参画しているプロジェクトでもアクセシビリティの対応が増えました。
今後のためにも備忘録的に取り組んできた対応の一部を書いておこうと思った次第です。

自分の参加しているプロジェクトでは[Apache Cordova](https://cordova.apache.org/)というモバイルアプリ開発向けのフレームワークをベースに開発を行っています。
技術的には3割ほどネイティブの実装で他はwebの技術を利用しています。
なので、iOS,Androidとタグにありますが、この記事ではHTML,TypeScriptでの対応方法です。

また、利用した一部の例を取り上げるだけなので、根本的な技術の理解みたいなのはこの記事ではできません。。

# テキストやボタンの読ませ方の基本的な対応

基本的にはWAI−ARIAに定義されているaria-labelを利用します。
[WAI-ARIAについて](https://developer.mozi

元記事を表示

Xcodeで「The provided entity includes an attribute with a value that has already been used on this account. The app name you entered is already being used for another app in your account. 」

Flutterで作成したモバイルアプリをAppleStoreで提出しようと思ったら、「App record creation error」 と表示されました。

# 結論

https://appstoreconnect.apple.com/apps

App Store Connectで新しいアプリを作成していなかったことが原因

元記事を表示

クリーンアーキテクチャのディレクトリ構成

“`
├── data
│   ├── datasource
│   │   └── 永続記憶デバイスへのアクセス。repositoryから依存される。
│   ├── repository
│   │   └── 永続記憶へのアクセス。データ取得の架け橋。
│   └── network
│   └── ネットワークへのアクセス。
├── domain
│   ├── model
│   │   └── ビジネスロジック。usecase、presenterから依存される。
│   ├── entity
│   │   └── ビジネスロジックが含まれないデータ。メソッドは含む。依存しない。
│   └── usecase
│   └── ユースケース。model、entityに依存する。
├── presentation
│   ├── presenter
│   │   └── ユーザインタフェースの制御。usecase、model、entityに依存。
│   └── ui
│   └

元記事を表示

【Flutter】TextFieldのキーボード管理で苦戦した話

## きっかけ
参画させていただいているプロジェクトで、
「前の画面に戻ったときにキーボードが出ている状態にしたい」
とのことで、思いの外悩んだので備忘録も兼ねて。
(TextFieldも、CupertinoTextFieldも解決済み)

## あまりいい記事がかけなかったので結論
インスタンスの生成タイミングの見直しをすべき:frowning2:

## 悩んだ理由
### 1. 入力後すぐ初期化されてしまう
### 2. 初期値を設定時も入力後すぐ初期化されてしまう
### 3. キーボードが閉じなくなった
### 4. キーボードが開かなくなった
## 結論:何が悪いのか
### インスタンスを生成する場所が悪かった
ただこれに尽きる。
基本的なサイトでは**全て画面を描画するところで説明している**為、インスタンスの生成タイミングについては触れられていないので苦戦してしまったということ。
じゃあどうすればいいのかというと**親クラス**でインスタンスを生成すればいい。
“` dart
class _MyHomePageState extends State

元記事を表示

【SwiftUI】アクセシビリティ設定によって透明度が変化する

# はじめに
https://qiita.com/SNQ-2001/items/d94c39ed765889b46869

https://qiita.com/SNQ-2001/items/25e8602ab341c7ec2cb5

アクセシビリティ設定によって実機で試してみるなんてことはなかなかないので気づきにくいです。
今回もたまたま発見したので紹介します。
(今回はMacOS限定です)
(しかも、メニューバーアプリの`window`スタイルで発生した)
(しかも、私がアクセシビリティをオンにしてた)

ということでかなり限定的な記事ですが、記録しておきます。

# 該当コード
“`swift:App
import SwiftUI

@main
struct accessibility_sampleApp: App {
var body: some Scene {
MenuBarExtra {
ContentView()
} label: {
Image(systemName: “paperp

元記事を表示

iOS/AndroidでONLYOFFICEドキュメントとNextcloudを連携する

## ONLYOFFICEとNextcloudの連携について

ONLYOFFICEでは、ONLYOFFICE DocsとNextcloudを連携させ、クラウドストレージ内でオフィス文書を編集するための公式コネクタを提供しています。ONLYOFFICEコネクタは、Nextcloudの[アプリストア](https://apps.nextcloud.com/apps/onlyoffice)またはONLYOFFICE [GitHubページ](https://github.com/ONLYOFFICE/onlyoffice-nextcloud)よりダウンロードできます。

:::note warn
ONLYOFFICEとNextcloudの連携コネクタの詳細や仕組みについては、[APIドキュメント](https://api.onlyoffice.com/editors/nextcloud)のページをご覧ください。
:::

### 主な機能

* テキスト文書、スプレッドシート、プレゼンテーションの作成、編集、閲覧
* オンラインフォームの作成と記入
* 他のユーザーとのファイル共有
* ト

元記事を表示

【2023年初頭版】BtoB向けのiOSアプリの配信方法についてまとめ(非公開App、非表示App)

## はじめに
一昨年くらいからBtoB向けのiOSアプリを開発しており、ノウハウが溜まってきたので記事にしました。

iOSアプリをリリースする場合、App Store経由で配信するのが一般的かと思いますが、BtoB向けのアプリケーションだと用途やセキュリティ的な観点から、不特定多数には公開したくないというニーズがあるかと思います。

そういったときに、非公開Appと非表示App(名前がややこしい)が選択肢としてあります。
本記事では、この2種類の方法や詳しいやり方、注意事項について説明していきます。

## この記事の対象者

– iOSアプリの一般公開についてざっと知っている
– App Store ConnectのマイAppの画面を見たことがある
– BtoB向けのiOSアプリの配信方法について知りたい

## TL;DR
– 自社や特定企業のみの配信方法として非公開App(カスタムApp)があるよ
– 非公開AppはMDMを使って、組織で管理しているiPhoneや引き換えコードと呼ばれるURLで配信できるよ
– 非表示AppはApp Storeで検索しても出てこないけど、UR

元記事を表示

【SwiftUI】Textを全て大文字で表示する

# はじめに
Textを全て大文字で表記したい時、以下のようなやり方をしてませんか?
私はしてました。
“`swift
Text(“APPLE”)
Text(“Apple”.uppercased())
“`

専用のModifierがあったので記事にしておきます。

# やりかた
### 全て小文字
“`swift
Text(“Apple”)
.textCase(.lowercase)
“`

### 全て大文字
“`swift
Text(“Apple”)
.textCase(.uppercase)
“`
# おわり
結構SwiftUI使ってると思いますが、意外と知らない機能も多いなと感じました。

元記事を表示

【SKAdNetwork 計測】AppsflyerのNullコンバージョン値を使ってコンバージョンを推定する

## なに?

AppsflyerのNullコンバージョン値を使って、Appleのプライバシーしきい値によりマスキングされてしまったコンバージョンを推定してみます。

– [Appsflyer SKAN推定値](https://support.appsflyer.com/hc/ja/articles/7086372479505?query=null%E5%80%A4)

なお、Apple公式では「Null値」という表現はされておらず
プライバシーしきい値を満たしている場合のみ、コンバージョン値(`conversion-value`)が提供されると記載されています。

https://developer.apple.com/documentation/storekit/skadnetwork/identifying_the_parameters_in_install-validation_postbacks

## なぜ?
今までは、IDFAをベースにした推定モデルを使用していましたが、昨今データがどんどん減少していく中で精度が信頼できなくなってきた。

## コンバージョンの推定

S

元記事を表示

R Markdownでスライドを作成(ioslides)

# Rでスライドを作ろう
この記事を読むと、以下の3つができるようになり、どうでもいいことを1つ(4.)知れます。
ちなみに、2と3はスライドでなくても、HTMLファイルにKnitしたものであればできます。
注)Windowsのコンピュータを想定して書いています。他のOSでもできますが多少キーや、やり方が違うかもしれません。

1. R Markdownでスライドを作成できるようになる
2. 細かいスライドの設定のやり方が分かる(上下左右にスクロールできるページなど)
3. 作成したスライドをページのリンクとして共有できる
4. @masato-terai がなぜRでスライドを作るべきだと思っているのか

# Rでスライドを作成するには
 Rでスライドを作成する方法はいくつかあるのですが、今回はioslideを用いて行う方法を紹介します。その他のスライドについてはこちらで紹介されていました [[1]](https://rstudio-pubs-static.s3.amazonaws.com/869589_0491c9112c6d4d48af55a8e114280be2.html#4)。

元記事を表示

【SwiftUI】特定の条件でのみオーバーレイする

# はじめに
条件によって`Text(“Hello, world!”)`にオーバーレイの有無を決定したいとします。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 Pro – 2023-01-21 at 21.35.26.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8039a8ff-ea86-d602-c248-ec9f0ac3dc15.gif)

# やりかた
“`swift:ContentView
import SwiftUI

struct ContentView: View {
@State var isShowBorder: Bool = false
var body: some View {
VStack(spacing: 50) {
Toggle(“”, isOn: $isShowBorder)
.labelsHidden()

元記事を表示

XcodeのリリースビルドでError (Xcode): “Runner” requires a provisioning profile.

XcodeのSigning & Capabilitiesにてただしく、
Apple DistributionのProvisioning Profileを設定しているのに、見つからないとのエラーがリリースビルドのたびに発生しました。

# 結論
Build & Setting
に行き、
・Code Signing Identityの
ReleaseがiOS Distribution

.Provisioning ProfileのReleaseが、manual設定で作成したprovisioning Profileが設定されているか確認する。(私の場合は無しになっていました。)

元記事を表示

Github Actionsのセルフホステッド ランナーでUnityをIOSビルドしてDeployGateに上げるまでの手順

# 概要
Github Actionsのセルフホステッド ランナーでUnityをIOSビルドしてDeployGateに上げるまでの手順です。
Appleの証明書周りのやりかたや各機能などは解説しません。手順と必要なコードのみ記載します。

おおまかな手順
1. GithubActionsにセルフホストランナーを登録
2. Unityにビルド用のコードを追加
3. IPAを手動でビルド
4. プロジェクトにExportOptions.plistを追加
5. main.ymlを追加
1.プロジェクト情報を追加
2. DeployGateの情報追加
6. (おまけ)GitHubAppでslackに通知する

# 1.GithubActionsにセルフホストランナーを登録
リポジトリもしくはorganizationsのSettingsのRunnnersからNew runnerを選択。必要な環境を選択してDownloadとConfigureのコマンドを実行。
この時すでにactions-runner導入済みであればDownload部分は不要です。
新しいリポジト

元記事を表示

Mac OS Ventura 13.1にアップデート後、 ExpoでiOSシミュレーターを開けないエラーが発生。

エラー状況

Mac OS Ventura 13.1にアップデートしたところ、
ExpoでiOSシミュレーターを開けないエラーが発生。

“`
› Opening on iOS…
Started Metro Bundler

xcrun exited with non-zero code: 2
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2):
Unable to boot device because we cannot determine the runtime bundle.
No such file or directory
“`

解決方法

Xcodeを立ち上げ

-> Xcode メニュー
-> Open Developer Tool
-> Simulator でシミュレータを立ち上げ

シミュレータメニューの Device
-> Erase all content and settingsでセッティングをクリア

元記事を表示

【Swift】returnの為だけに改行したくない

# はじめに
何を言ってるのかというと
“`swift
guard let url else {
print(“URLが見つかりませんでした”)
return
}
“`
guard文を使用するとelseでは必ずreturnを書かないといけません。

しかしreturnを書く為だけに改行をするのはちょっと。。。
って思うのは私だけですか??

# やりかた
“`swift
guard let url else { print(“URLが見つかりませんでした”); return }
“`

# 解説
`;`で繋げる感じですね

# おわり
これが良いのかどうかはわからないですが、個人的には1行にした方が見やすいと思いました。

元記事を表示

OTHERカテゴリの最新記事