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

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

【Swift】オプショナルのアンラップ方法

# 強制アンラップ
“`swift
var text: String? = “Hello world”

print(text!)

// Hello world
“`

# guard
“`swift
var text: String? = “Hello world”

guard let text = text else { return }

print(text)

// Hello world
“`

# if let
“`swift
var text: String? = “Hello world”

if let text = text {
print(text)
}

// Hello world
“`

# デフォルト値
“`swift
var text: String? = “Hello world”

print(text ?? “”)

// Hello world
“`

元記事を表示

超リアルなiOSのクローンアプリを作る!

# スマホ(iOS)のクローン

## 今回作ったもの(開発中)
[iOSのクローン](https://mf3px.sakura.ne.jp/PhoneClone/#p4)
![20220626_184247.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471258/6c5ad4a1-6f76-510e-348d-d152859a8144.gif)

## 製作物の特徴
– iOSの特徴を捉えた触れるUI
– YouTubeの簡単なアプリ
– ピアノ(実際に音が鳴ります)
– 投稿掲示板(PHP)
– ロック画面,設定画面
– 通知,アラートの機能
– 下のホームバー(黒色の細長いボタン)をクリックするとホーム画面へ
![JointPics_20220626_190051.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471258/2fa09870-0f76-05ec-83d7-32bb038c6872.png)

元記事を表示

Firebase In-App Messagingを試してみる(iOS)

# 概要
– アプリ内で表示させるポップアップを広報担当者レベルで出したいという要望が出そうなため、Firebaseコンソール画面で操作できるFirebase In-App Messagingを試してみる。BigQuery連携してユーザーセグメントを作成していければサーバー担当者の負担を減らせないかな・・・。

# Firebase In-App Messagingについて
– ドキュメント
– https://firebase.google.com/docs/in-app-messaging?hl=ja
– Firebaseコンソール
– https://console.firebase.google.com/?hl=ja

# 前提
– Firebaseプロジェクトを作成していること
– [Firebase を Apple プロジェクトに追加する](https://firebase.google.com/docs/ios/setup?hl=ja)

## プロジェクトに Firebase In-App Messaging SDK を追加する(podでも良さそ

元記事を表示

[SwiftUI] PreferenceKeyの基本的な仕組みを知る

子ビューから親ビューにデータを渡す仕組みとして頻繁に使用するPreferenceKeyですが、

– reduce()メソッドの実装ってこれで合ってるんだっけ?
– onPreferenceChangeにはどういう値が入ってくる?

といった点について、毎回デバッグして調べてたので、改めて整理しました。

# コード例

ビューとPreferenceKeyを以下の通り実装します。

“`swift
struct ContentView: View {
var body: some View {
VStack {
Color.clear
.preference(key: StringPreferenceKey.self, value: “Rectangle1”)

Color.clear
.preference(key: StringPreferenceKey.self, value: “Rectangle2”)

Color.

元記事を表示

iOSアプリバージョンを取得するユーティリティ

# バージョン取得ユーティリティの実装例

iOSアプリの現在のバージョンを取得するコードは以下のように実装できます。

“`swift
Bundle.main.infoDictionary![“CFBundleShortVersionString”] as! String // いわゆる「アプリバージョン」
Bundle.main.infoDictionary![“CFBundleVersion”] as! String // いわゆる「ビルドバージョン」
“`

これらをまとめたユーティリティは例えば以下のように実装できます。

“`swift
public enum AppVersion {
public static func appVersion() -> String {
info(key: “CFBundleShortVersionString”) as! String
}

public static func buildVersion() -> String {
info(key: “CFB

元記事を表示

SwiftのTableViewの再利用機能によってCell内のUIButtonのtagがうまく取得できない

Swiftのテーブルビューはスクロールする際にセルを再利用する。
そのため、テーブルビューのセル内にUIButtonを設定している場合、
スクロールするとUIButtonのTagとindexPath.rowと整合性が合わなくなってしまう問題に直面した。

:::note alert
よくあるセル内にUIButtonを設定するコードでは、
タップしたセル内のUIButtonのindexPath.rowとsender.tagが合わない
:::
“`Swift
// Cellの内容
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: “Cell”)

// UIButton
let button = UIButton()
button.tag = indexPath.row
// 押

元記事を表示

CTF情報収集のiOSアプリを作った

# CTF情報収集 アプリ

## 概要
本記事では、SwiftUIでCTF情報を収集できるアプリケーションを開発したので、実装方法の紹介をしようと思う。

## アプリビュー
             

## 実装方法
開発言語: SwiftUI

SwfitUIで[CTF Time](URL “https://ctftime.org/”)のAPIを叩き表示している

## 今後の展開
CTFの情報だけでなく、セキュリティ関連のニュースも表示するように拡張していく。

元記事を表示

iOSアプリの各種配信方法とCustom AppをIP制限ありのままで審査に通す方法

# スライド版

# 結論

– IP制限ありのままかつ、Appleのレビュアーにログイン情報を提供しなくても審査は通る。
– アプリ申請ページの `App Reviewに関する情報` にアプリの説明と添付ファイルにアプリの動作がわかる動画を添付する。
– 注意点として、ログインやカメラ等の許可アラートを必ず含める必要がある。

# 前提知識

## Appの配信方法

| 配信方法 | 公開範囲 | Appleの審査 | 説明 |
| — | — | — | — |
| App Storeで配信 | App Store | 必要 | 通常のアプリ申請によるApp Storeへ公開される方法 |
| Custom Appで非公開で配信 |

元記事を表示

【Xcode】アップデート時にエラー発生

# エラー文
![スクリーンショット 2022-06-25 1.56.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/68d1a3a3-8804-f3c2-fd31-200c3fac788a.png)
“`
Unable to process request – PLA Update available
You currently don’t have access to this membership resource. To resolve this issue, agree to the latest Program License Agreement in your developer account.
“`

“`
No signing certificate “iOS Distribution” found
No “iOS Distribution” signing certificate matching team ID “XXXXXXXXX” with a pr

元記事を表示

まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。

![mogmet](https://user-images.githubusercontent.com/1166342/175216261-91dea414-07e5-4937-9a68-e25fe946e146.jpg)
最近牛宮城へいったのですが、宮迫さんに遭遇することができました。もっとお話してみたかったです。

本日は先日のWWDCで発表があったパスワードを駆逐できるPasskeysについて仕組みや実装法を紹介します。

https://developer.apple.com/videos/play/wwdc2022/10092/

Passkeysの説明、仕組み、実装といった流れで紹介していきます!

## Passkeysとは?

Passkeysはパスワード無しで認証ができてしまうすごい仕組みです。
どんなもの

元記事を表示

【SwiftUI】The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressionsを解決

# はじめに
私はSwiftUIに慣れるまでこのエラーを出しまくりました。
しかし、よくエラーの意味がわかりませんでした笑

最近になって解決方法がわかったので記録しておきます。

# エラー文
![Xni95.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7ab868ae-29ce-9e70-8483-f5984366d331.png)
“`
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
“`
「コンパイラは、この式を合理的な時間で型チェックすることができません。この式を個別の部分式に分割してみてください。」ということらしいです

# 原因
「Viewの中にエラーがあるがコードが多すぎでどこがエラーかわからない」

おそらくこんな感じではないかと思っています。

元記事を表示

UnrealEngine iOSでカメラロールへのアクセス許可を求める

# 最初に
UE4のバージョンは4.27.1
Xcodeのバージョンは13.1
になります。
[UnrealEngine iOSでカメラロールにスクリーンショットを保存する](https://qiita.com/usagon/items/3906fd391e546d91aa95)
でiOSでカメラロールにスクリーンショットを保存する方法を記載しましたがiOSではカメラロールにアクセスする場合はアクセス許可をしてもらう必要があります。
スクリーンショットを撮影する際にアクセス許可を求めていない場合はダイアログが表示されるのですが実際に撮影する時にしかアクセス許可を求めていないので2回目移行はユーザーがアクセス許可を許可したのかがわからない状態です。
ユーザーがアクセス許可を拒否した場合にスクリーンショットの機能を使えない事をユーザーに伝える事もできません。
なのでアクセス許可の状態を取得しようとして苦労したので同じようにアクセス許可を取得したい方の助けになればと思い記事にしました。

※記事の方法が必ずしも最適な方法とは限らず自分はこの方法で可能だったのであくまで手段の一つとしてみて頂け

元記事を表示

バックグラウンド・スリープ時にもカウントダウンを動作させる

# やりたいこと
任意の時間からカウントダウンして、時間切れになったら任意の処理を行いたい。

## カウントダウン実装
今回はmm:ssの形でのカウントダウンを画面上に表示して、00:00になったら任意の処理を行うという実装です。

“`swift:countDownContoroller.swift
import UIKit

class countDownContoroller: UIViewController {

@IBOutlet weak var countDownLabel: UILabel!

var timer = Timer()
var time = 600 //10分間

override func viewDidLoad() {
super.viewDidLoad()
countDownStart()
}

func countDownStart(){
timerStart()
}

func timerStart

元記事を表示

【iOS】LINEログインを実装してみる

# はじめに

LINEログインの機能を簡単に触ってみたく、ドキュメント通りにやってみました。

https://developers.line.biz/ja/docs/line-login/overview/

# 環境
Xcode 13.3
Swift 5.6
LineSDKSwift 5.8.1

# 内容
### LINEディベロッパー登録

まずは登録

https://developers.line.biz/ja/services/line-login/

![スクリーンショット 2022-05-20 14.09.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/5ffb1ce0-9d44-8289-8ca4-f464cfe40d72.png)

## プロジェクト設定
https://developers.line.biz/ja/docs/ios-sdk/swift/setting-up-project/

>LINE SDK for iOS Swiftをビルドして使用する

元記事を表示

【SwiftUI】ダークモードを検知する

# 公式ドキュメント
https://developer.apple.com/documentation/swiftui/colorscheme

# 使い方
“`swift
import SwiftUI

struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text(colorScheme == .dark ? “Dark” : “Light”)
}
}
“`

# おわり
システムのカラースキームとは別のカラースキームをアプリ内で使用したい場合は少し工夫が必要になります。
以下の記事がとても参考になりました。

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

元記事を表示

SwiftのDictionaryについて

## Dictionary(辞書)の基本
Swiftの Dictionary(辞書)は、「順序をもっておらず、キー(Key)と値(Value)が1セットになった複数のデータの集まり」です。

作成したキーは辞書の索引のようなイメージで、
キーを指定して、値の追加や削除、また取得することができます。
→ そのため、同じ名前のキーが複数存在すると混乱が起こってしまうので、辞書のキーは一意的ものである必要があります。

## Dictionaryの作り方
“`Swift
var dict1:[String: Int] = [:]
var dict2 = [String: Int]()
var dict3: Dictionary = [:]
var dict4 = Dictionary()
“`
公式ドキュメントでは1と2行目の[Key:Value]de
表記することを推奨しています。

さらに、型推論も使用できるので、データ型の省略もできます。
“`swift
var dict = [“Key1”: 10, “Key2”: 5, “K

元記事を表示

UnrealEngine iOSでカメラロールにスクリーンショットを保存する

# 最初に
UE4のバージョンは4.27.1
Xcodeのバージョンは13.1
になります。

Android端末でのスクリーンショットの方法に関しては


おかずさんが公開しているサンプルで可能です。
https://orenda.co.jp/blog/1791/
こちらの記事でもスクリーンショットの撮影方法に関して書いてくれていますので参考になります。

今回はiOSでカメラロールにスクショを保存する具体的な実装例がなく苦労したので一例として記事にしてみました。

# スクリーンショットを撮る方法

スクリーンショットを撮るには
FScreenshotRequestのRequestScreenshotで行います。
引数は
InFilename 使用するファイル名
bInShowUI SlateUIを表示するかどうか
bAddFilenameSuffix 自動生成された一意のサフィックスを指定されたファイル名に追加する必要があるかどうか
とあり基本的には
InFilen

元記事を表示

[Swift]UIImageのサイズを変更する(Extensionは使わない)

## はじめに
UIImageのsizeを変更しようとすると、`Cannot assign to property: ‘size’ is a get-only property`とエラーが発生します。対処法を調べてみると、UIImageを拡張することで対応しているコードが多いと思います。

ただ、Extensionは使わずにUIImageのsizeを変更したいと思う人もいるはずなので、今回はそんな人向けにコードを紹介します。

## コード
“`ContentView.swift
func hogehoge() {
let image = UIImage(named: “画像名”)
let scaledImageSize = CGSize(width: 100, height: 30)
let renderer = UIGraphicsImageRenderer(size: scaledImageSize)
let scaleImage = renderer.image { _ in
image.draw(in: CGRect(orig

元記事を表示

Swiftではじめに学ぶ「変数と定数」

## 変数と定数とは
プログラムに登場する値を記憶しておく入れ物、つまり一時的な保管庫のことです。
ある処理の結果を、この変数や定数に保存しておけば、後々その結果を使いたいタイミングで呼び出して再利用することができます。

ちなみに変数や定数に値を入れることを、「値を代入する」と言います。
そして文字通り、変数には何度でも値を代入することができ、定数には1度だけしか値を代入することができないルールがあります。ですので、プログラム上で確定している値に定数を使えば今後の処理で誤って別の値が代入されることこともないので安心です。つまり上手く使い分けることで、安全で可読性の高いプログラムが書けるようになります!

表記の仕方は下記のようです。
“`swift:
var number = 123 //変数numberに値「123」を保存している
let age = 16 //定数ageに値「16」を保存している
“`
・「var」は変数を、「let」は定数を指します

元記事を表示

SwiftでレーダーのUIを作ってみた。[iOS、iPhoneアプリ]

# レーダーを作ってみたい
映画「トップガンマーヴェリック」を見て、戦闘機に付いているようなレーダーを再現してみたいと思い作ってみました。

#### 完成図
スクリーンショット 2022-06-01 11.12.28.png

# カスタムクラスを作る
今回はRadarViewというカスタムクラスを作って実装しました。

“`swift:RadarView.swift
func configureUI() {
isUserInteractionEnabled = false
backgroundColor = UIColor.black
layer.cornerRadius = bounds.width / 2
layer.borderColor = UIColor(red

元記事を表示

OTHERカテゴリの最新記事