- 1. インジケータの使い方
- 2. 【Swift】UITableViewでセクションの間隔を調節する
- 3. 【Swift】UITableViewのインプレッションをReactiveに計測する
- 4. Firebase Remote configでアプリのバージョン指定を使う
- 5. 子供向けアプリ案として iOS_おやつの合計金額算出アプリ
- 6. MapKitに関して学んだあれこれ
- 7. 【SwiftUI】MenuBarExtra使ってみた
- 8. FlutterでTodo管理dAppを作る
- 9. 【SwiftUI】リマインダーを自作!作成手順と開発方法
- 10. Appleの審査で「Sign in with Apple」がなくてリジェクトされた話(Guideline 4.8 – Design – Sign in with Apple)
- 11. [Xcode]Coverage.profdataの中身を見る
- 12. 【SwiftUI】DisclosureGroupを使ってみた
- 13. [iOS] [UIKit] async/awaitとCombineを利用したMVVMアーキテクチャのサンプル
- 14. 【Swift】チュートリアルライブラリ使ってみた
- 15. モバイルアプリの自動テストツールShiratesを使ってみよう(その2)
- 16. 【Swift】CaseIterableを使って列挙型の配列を取得する
- 17. 【Swift】端末の傾きを取得する
- 18. iOS App Dev Tutorialsを読んで実際にやってみた。その2
- 19. [Swift] クロージャについて理解する
- 20. 【Swift】ループ内を並列処理する
インジケータの使い方
# 設定
Storyboardを用いた場合、コードで変えれる部分が色ぐらいだと思います。(他にもおすすめの設定があればコメント頂けると幸いです。)“`ViewController.swift
@IBOutlet private weak var indicator: UIActivityIndicatorView! {
didSet {
// 色指定(青)
indicator.color = UIColor(red: 44 / 255, green: 169 / 255, blue: 225 / 255, alpha: 1)
}
}
“`# アクション
それぞれ行いたいタイミングで呼び出します。
インジケータは非同期処理と共によく用いられますが、その説明は別記事で紹介します。“`ViewController.swift
// インジケータを表示
indicator.isHidden = false// アニメーションを開始
indicator.startAnimating()// インジケータを非表示
indic
【Swift】UITableViewでセクションの間隔を調節する
# はじめに
タイトルのまんまなんですけど、わかりにくいので画像を貼っときます。
![Simulator Screen Shot – iPhone 14 Pro – 2022-10-28 at 19.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1101ecf2-48ba-5aa3-1217-fc12185897d7.png)やっていきます
# 調節前のコード
SnapKit使ってます笑
“`swift
import UIKit
import SnapKitclass ViewController: UIViewController {
private let tableView: UITableView = {
let view = UITableView(frame: .zero, style: .insetGrouped)
view.register(UITableViewCell.self, forCellReus
【Swift】UITableViewのインプレッションをReactiveに計測する
# インプレッション計測について
いろんな呼び方があるようですが、「見た」というイベントを測定することです。タップアクションなどわかりやすいユーザ行動とは別に、例えば配信したコンテンツがどれだけユーザの興味を引いているかを可視化することができます。広告系のコンポーネントではユーザに見られたことが収益につながるのでこのインプレッションが重要な要素になるのですが、サービス独自のコンテンツでもインプレッションを測りたいという需要は多いはずです。
今回はiOSのUITableViewをターゲットに、Cell毎のインプレッションを計測する例です。Delegateパターンはよく目にしましたが、RxSwift等のリアクティブな設計は目にしなかったので、そんな需要に合うかもしれません。# 要件
弊社SARAHのインプレッション計測要件の一例です
– コンテンツ(Cell)のn割の領域が画面上に表示され
– 且つその状態がm秒間維持されたらインプレッションイベントを送信する
– 同一遷移内では、一度インプレッション計測したコンテンツ(Cell)は再度計測しない# 環境
– Xcode 14.0.
Firebase Remote configでアプリのバージョン指定を使う
# はじめに
Firebase上で設定値を変更できるFirebase Remote configですが、一律の設定値を設定するだけでなく、アプリの条件によって該当するものだけを設定することも可能です。
設定できる条件は以下に記載されています。https://firebase.google.com/docs/remote-config/parameters?hl=ja#condition_rule_types
そこで、アプリのバージョンによって設定値が変わるものを設けようと思ったのですが、グレーアウトされていてどうにも設定ができなかったので、設定方法について説明します。
![スクリーンショット 2022-10-28 9.58.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/8a120609-2ac6-23ff-e233-5e4063383771.png)# 設定方法
まず`アプリ`の項目で、アプリを選びます。
![スクリーンショット 2022-10-28 10.06.14.pn
子供向けアプリ案として iOS_おやつの合計金額算出アプリ
# はじめに
1枚もののアプリなら作れそうな気がする(←画面遷移時のあらゆる考慮に自身がない)# 1枚もののアプリを作ろう
なんなら一晩でできるやつ(15~45分)
一晩と言っても、アニメ鑑賞の時間も確保せねばならんしな。# アプリ画面
![Simulator Screen Shot – iPhone 14 Pro – 2022-10-27 at 22.50.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551624/433cb645-ce58-c284-593e-9280565ec068.png)
# コード
“`swift:ContentView.swift
import SwiftUI
extension UIApplication {
func endEditing() {
sendAction(
#selector(UIResponder.resignFirstResponder),
to:
MapKitに関して学んだあれこれ
# 概要・背景
なぜ全く業務に関係ないMapKitを学習しているかというと、「行きたい場所をピンで刺して忘れないようにしておく機能を持つアプリ」を個人開発しており、MapKitをこれでもかと言うほど使っているからです。
正直今回の発表で説明しても業務内で活用できる点はないと思われますが、どうか温かい目で見ていただければ嬉しく思います。
(※技術的に未熟で間違っていることも多々あると思われますが、コメントでご指摘・ご教示いただければ幸いでございます。)## 開発環境
MacBookAir: M1,2020 (チップApple M1)
macOS: Monterey 12.5
Swift: 5.7?ぐらい
Xcode: 14.0iPhone: iPhone13 128GB スターライト
iOS: 16.0# MapKitとは
MapKitとはそもそもなんぞや?と問いかけたいのですが、その名の通り地図に関するあれこれを簡単に実装できてしまう、フレームワークのことです。もう少し頭が良さそうに言えば、
>Display map or satellite imagery within
【SwiftUI】MenuBarExtra使ってみた
# はじめに
以前、SwiftUIでメニューバーアプリを作成しました。https://qiita.com/SNQ-2001/items/7e8ac52e9e8726228806
この時は公式でサポートされていませんでしたので、NSHostingControllerとNSPopoverを使用して無理やり作っていました。
しかし!!WWDC22で`MenuBarExtra`というメニューバーアプリをSwiftUIで作る用の機能が発表されました!!
macOS13がリリースされたので早速使ってみました!
以前の実装方法と比較しながら紹介できたらと思います!
# 以前の実装方法
“`swift
import SwiftUI@main
struct SwiftUI_MenuBar_DemoApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
Settings { }
}
}class AppDele
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 AppleYour 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 SwiftUIstruct ContentView: View {
@State var sliderValue: CGFloat = 50.0
var body: some View {
List {
DisclosureGroup(“メニュー”) {
D
[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)
– View層
– Storyboard
– UIViewを継承したclass(UI部品)
– Controller層
– UIViewControllerを継承したclass
– Model層
【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 CoreMotionstruct 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を開き新しいテンプレートを作る。
[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) } } ``` #