iOS関連のことを調べてみた2021年11月09日

iOS関連のことを調べてみた2021年11月09日
目次

nibを用いて、TableViewを作成(初学者向け、Delegateの説明なし、コード説明あり)

Swift初学者であり、間違っていることも、
記載していますので、ご注意ください。

##手順1
まずはTableCellクラスで、
Nibの名前、IDをスタティック定数として、記載しておく。
**メリット**
コードで管理して、スペルミスを防ぐ+入力変換に表示される 

“`
final class ItemListTableViewCell: UITableViewCell {
static let nibName = UINib(nibName: “TableViewCell”, bundle: nil)
static let nibID = “Cell”
}
“`

##手順2

TableViewCellに、Identifier:Cellを設定。
![スクリーンショット 2021-11-09 8.34.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/749856e9-51bc-5105-4afb-ae2c72b80afc.png)
##手順3
V

元記事を表示

【Flutter】プラグイン作成時にiOSローカルのライブラリを参照する方法

# 概要
Flutterプラグイン作成時に、プラグイン側でiOS向けローカルライブラリを抱きこむ際の設定方法を整理します。
ユースケースとしては、プラグイン利用者が公開済のpodを利用するのではなく会社独自のiOSライブラリ等をプラグインを通してFlutterで利用することを想定しています。

# 環境
“`shell-session
$ flutter –version
Flutter 2.5.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 18116933e7 (3 weeks ago) • 2021-10-15 10:46:35 -0700
Engine • revision d3ea636dc5
Tools • Dart 2.14.4
“`

# 実施内容

① Frameworkの取り込み
 a. iOSプロジェクト直下に利用したいライブラリのframeworkをコピーアンドペースト
  - ※frameworkは、exampleのiosプロジェクトを配置し

元記事を表示

Unity2019でAdmob実装時にクラッシュして表示されないときの対処法

https://kaedeee.com/unity2019-admob/

しばらく更新していませんでした!というのもアプリ作るのにはまってて笑

(アプリのURLはまた後で)

ところで今回は、 Unity 2019でAdMobを実装した際にクラッシュしてしまいアプリが表示できなくなってしまう時の対処法です。

(やはり Unity 2019は最新版ということで2019に関する記事がなかなかなーい!!笑笑)

というわけで僕のでよければ参考にどうぞ。

結論から言うと以下二つに対応することでうまくいきました!!

(あ、Android アプリ用です。この記事)

#Unityのバージョンを確認する

結論から言うと

Unity 2019 1.4f1

 × 

Google mobile ADS Unity plugin 3.16 

が最強!

はじめ自分は

Unity のバージョン→ 2019.3.0a3

AdMobのバージョン→Google mobile ADS Unity plugin v3.17

を投入!

ですがこの時にx86 no

元記事を表示

AppStore リジェクト「Safety – Physical Harm: COVID-19 の対策について触れてるけど情報ソースがないよ」の対処

初めて見るリジェクト内容で少し戸惑ったため共有。

# 状況
2021年10月ごろ。
とあるイベントで使用するアプリの申請を行った際に「Guideline 1.4.1 – Safety – Physical Harm」を理由にリジェクトされた。

# 詳細

リジェクト内容は以下。

> Your app provides health or medical recommendations or references without including the sources of the medical information.
> Specifically, we found your app includes safety precautions related to COVID-19 upon launch.
> All apps with medical and health information should include links to sources for the information. This helps ensure that App Store u

元記事を表示

UITextView上の任意のテキストに対してカスタムContextMenuを提供する

[UITextView](https://developer.apple.com/documentation/uikit/uitextview)では、[dataDetectorTypes](https://developer.apple.com/documentation/uikit/uitextview/1618607-datadetectortypes)を指定することにより、[カレンダーイベント](https://developer.apple.com/documentation/uikit/uidatadetectortypes/1618506-calendarevent)、[住所](https://developer.apple.com/documentation/uikit/uidatadetectortypes/1618504-address)、[飛行機の番号](https://developer.apple.com/documentation/uikit/uidatadetectortypes/1648140-flightnumber)などを認識し、タップアクションとコン

元記事を表示

iOSアプリ開発に便利なライブラリ

#はじめに
– ライブラリについてメモとして記事を書いています。

#便利なライブラリ一覧
– IQKeyboardManager
– Kingfisher
– SnapKit
– lottie-ios

#IQKeyBoardManager
### どんなライブラリ?
– IQKeyboardManagerのGitHubから引用

– While developing iOS apps, we often run into issues where the iPhone keyboard slides up and covers the UITextField/UITextView. IQKeyboardManager allows you to prevent this issue of keyboard sliding up and covering UITextField/UITextView without needing you to write any code or make any additional setup. To use IQKeyboardMana

元記事を表示

【Flutter】Statefullなカウンターアプリをhooks_riverpod+state_notifier+freezedでリファクタリングする

FlutterのNullSafetyがstableになってしばらくたち、最近になってriverpodがstableになったので、記念にhooks_riverpod + state_notifier + freezedの使い方を最低限記載しておきます。
プロジェクトを作った時に作られるカウンターアプリを上記パッケージを使って実現するようにリファクタリングしていきます。

# tl;dr

– flutterの初期アプリをhooks_riverpod+state_notifier+freezedを使うようにリファクタリングする
– 結論としては単機能なアプリでこんなに複雑にやると余計わかりずらい(趣旨としてはサンプルなので良いのですが、、、)
– freezedも無理やり使ったしhooksはさすがに使えなかったので、hooks特有の機能については本記事のスコープ外

#### 完成版の全コード

https://github.com/tokku5552/flutter_riverpod_sample/tree/1.0.0

## 環境
– Android Studio

“`yaml:

元記事を表示

【もう、なくそう。】誹謗中傷を「なくす」アプリの開発

# はじめに
**技術的な内容のみをご覧になりたい方は[こちら](#技術的なポイント)からどうぞ**

[](https://tokiwaproject.page.link/mute)

**誹謗中傷をネット上から「なくす」アプリ**を開発しました。簡単にいうと、Web上の特定の単語、過激な表現や人を傷つけるような言葉を非表示にするものです。

アプリ開発の動機など、いわゆる「ポエム」よりの内容は[note](https://note.com/izumo092/n/ne17f44c9fda4)に掲載しているので、Qiitaでは機能や技術面に絞ってお話ししたいと思います。

**[ダウンロードはこちらから](https://tokiwaproject.page.link/mute)**

https://apps.apple.com

元記事を表示

enumとvalidationの用い方(初学者向け、コード説明あり)

Swift初学者であり、間違っていることも、
記載している可能性もありますので、ご注意ください。

##まずはじめに用語の説明

バリデーションとは、
__入力内容や記述内容が要件を満たしているか、妥当性を確認すること__
URL:https://wa3.i-3-i.info/word11610.html
かんたんに言うと 入力チェックです。

enumとは、
__列挙型(enum)とは関連性のある事柄、データを一つにまとめた定数のようなものです。__
URL:https://www.sejuku.net/blog/35711

##行いたいこと
テキストフィードが2つあり、
一つに税抜金額、
もう一つに税率を入力し、
数値が入力されているか、されていないかを確認する。
チェック後に、行いたい処理を行う。

というプログラムを作成します

##enumでValidationを定義
![スクリーンショット 2021-11-08 5.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/

元記事を表示

[SwiftUI] ロングタップした位置をViewに伝える方法

## はじめに

SwiftUIで、Gestureを使ったUIを作成する機会があり、その時の実装メモを残したいと思います。

## どんなことをするのか

Viewをロングタップして、その場所(座標)をView側に伝える

## 概論

SwiftUIだけでは完結しなかった。
UIViewRepresentableを使って、UIKitのGestureを使う必要がある(iOS14までだと多分、)

## 実際のコード

早速実際のコードです

UIViewRepresentableを使ったところ

“`ViewRepresentable.swift
struct ViewRepresentable: UIViewRepresentable {

class Coordinator: NSObject {

@Binding var point: CGPoint

init(point: Binding) {
_point = point
}

@objc func longTappe

元記事を表示

CGRectを中心とサイズ指定で簡単に生成できるようにする

##やりたいこと

Viewの配置場所指定などで頻繁に使用する、おなじみのCGRect。

CGRectの生成方法は

“`swift
CGRect(origin: CGPoint, size: CGSize)
“`

 または

“`swift
CGRect(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
“`
という感じで、
 四角形の左上の座標指定 + 幅・高さ指定
で生成します。

なのですが、実際には
中心の座標指定 + 幅・高さ指定
からCGRectを生成したいシーンはよくあるかと思います。

毎度毎度、これらの値からoriginを計算してCGRect生成するのはめんどくさいので、
 中心の座標 + 幅・高さ
で一発でCGRectを生成できるようにしてしまいたいですね。

##解決方法

CGRectを 中心座標 + サイズ の情報で生成でいるイニシャライザを、
CGRectのExtensionとして実装してしまえば良いです。

“`swift:CGRectExtension.swift
i

元記事を表示

Flutter製のiOSアプリでApple Watchを連携する際にハマったこと

Flutter製のiOSアプリでApple Watchを連携する際にいろいろハマった点があったのでメモに残しておきます。

# 環境

– Flutter 2.5.2
– Xcode 13.0

## 基本的な手順
– XcodeのiOSプロジェクトにWatchのターゲットを追加
– プロフェクトフォルダ内/ios/Runner.wcworkspaceをXcodeで開く
– File>New>Target>WatcOS>Watch App for iOS App
– 任意のプロジェクト名(ここの記事では**watch**とする)をつけて作成
– bitcodeをYESに変更
– iOSとWatchOSのバージョン番号を一致させる
– Flutter Method ChannelでFlutterとSwift間のデータのやり取りを実装

詳細は[こちらの記事](https://medium.com/kbtg-life/adding-apple-watch-to-flutter-app-via-flutter-method-channel-f1443532d94e)を

元記事を表示

ignoresSafeArea の第一引数と SwiftUI のキーボード避け

## 概要

SwiftUI には `ignoresSafeArea` という modifier がありますが、しっかり理解せず使っていたので基本的な動作や引数の役割、SwiftUI の自動でのキーボード避けとの関係について調べてまとめました。

## ignoresSafeArea とは

SwiftUI の View はデフォルトでは SafeArea の中に配置されます。例えば画面全体に背景色を設定しようとすると、背景色は以下のように SafeArea 内だけに適用されます。

“`swift
struct ContentView: View {
var body: some View {
Color.yellow
}
}
“`

ときにはこの振る舞いが余計なお世話になってしまうことも

元記事を表示

iOS(Swift)リンク集

個人的な雑多リンク集です。

https://stackoverflow.com/questions/39080807/drag-and-reorder-uicollectionview-with-sections/39088025#39088025

[Supporting Drag and Drop in Collection Views](
https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/supporting_drag_and_drop_in_collection_views)

https://swift-ios.keicode.com/devenv/xcode-how-to-build-for-12-with-xcode11.php

https://phosphor-bronze.blogspot.com/2018/07/uicollectionviewios11.html

※配列の要素の交換は`swapAt(i, j)`で可能

https://qii

元記事を表示

iOS15でのジオフェンシングの異常について

#iOS15でのジオフェンシングの異常について
iOS14まで正常に動いていたジオフェンシングが、
iOS15以降、正常動作していないケースがありました。
「iOS15での端末再起動後、アプリ起動するまで、ジオフェンスを検知しない」問題があるようです。

日本語での該当記事が見つからないため、
とりあえずレベルですが、検証してみました。

##海外記事
[ios15 geofencing not working]で検索すると、
いくつかのアプリで、iOS15+ジオフェンシングの組み合わせで問題があり、
掲示板などで多少、会話がなされているようです。
内容的には、以下のような共通点があります。

– iOS14までは問題なく、iOS15では問題がある
– 端末再起動後、アプリを起動しないとジオフェンスが有効にならない
– iOS15.0.2でも直っていない

[Geofencing problems with iOS15.01]
https://discussions.apple.com/thread/253247480

[Geofencing and iOS15.]
https://

元記事を表示

Xcode13のUser-Defined Settingで「MTLLINKER_FLAGS」キーが登録できないときの対処法

# TL;DR
Xcodeのビルド設定に新しく`Metal Linker – Build Options`という項目ができているので、そこに値`-cikernel`を指定しましょう。

# 環境
– Xcode 13.1
– macOS Big Sur 11.6.1

# 起こっていたこと
Core ImageのフィルタをMetalファイルで記述するには、XcodeのBuild Settingを以下の2つ変更する必要があります。

– `Other Metal Compiler Flags`に`-fcikernel`を指定する
– `User-Defined Setting`として`MTLLINKER_FLAGS`キーを追加し、値に`-cikernel`を指定する

このうち下側の`User-Defined Setting`で`MTLLINKER_FLAGS`キーを追加しようとしたところ、「すでに設定されている名前なので違う名前で設定してね」というエラーが出ました。
> There already is another setting named “MTLLINKER_FLAGS”.

元記事を表示

Xcode Cloud でプロジェクトをビルドしてみる

## これは何

Xcode Cloud でプロジェクトをビルドする方法のメモです。そもそも Xcode Cloud って何よ?という方は下記サイトを御覧ください。

[Xcode Cloud Overview \- Apple Developer](https://developer.apple.com/xcode-cloud/)

## 利用申請

Xcode Cloud はまだベータ版であり、利用するには下記URLから申し込む必要があります。

https://developer.apple.com/xcode-cloud/beta/request/

何日か待つと「使えるようにしたよ〜」といった内容のメールが Apple から届きます。

## とりあえずビルドしてみる

まずは [Xcode 13](https://developer.apple.com/download/) 以降をインストールしましょう。

次に Xcode のメニューから Product > Xcode Cloud > Create Workflow… を選択します。

![スクリーンショット

元記事を表示

Firebase × Swift × Vueでマッチングアプリmeepleをリリースしました!

2021.11.04 本日、ブラインドマッチングアプリ **meeple(ミープル)** をリリースしました!
この記事では開発に至るまでの経緯〜リリースまでの過程と、その中で思ったことをまとめました。

#自己紹介
新卒2年目のWebエンジニア。
このアプリに集中するため、ちょうど最近会社を辞めたところです。
半年ほどちまちまとSwiftとFirebaseを触った後、去年の12月から友人3人を誘って本格的にアプリ制作を開始しました。

#作ったアプリ
###meeple (https://meeple.jp/)
***「1度の出会いを大切に」***をコンセプトとした、モザイクから始まる、運営からの紹介制のブラインドマッチングアプリです。
> ※ブラインドマッチングとは簡単に言うと、**プロフィール非公開・審査登録制・運営紹介型**のマッチングサービスです。

[App Storeリンク](https://apps.apple.com/jp/app/id1592092244)
![アプリの説明画像](https://qiita-image-store.s3.ap-northea

元記事を表示

【App Architecture編】流し読みするHuman Interface Guidelines

## App Architecture
? は`iOS 15.0`から導入されたものです。

### Launching

– Provide a launch screen.
→ コンテンツのロード中にユーザを待機させない
参考: [Launch Screen](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/launch-screen)
– Launch in the appropriate orientation.
→ アプリ起動時の画面の向きを考慮する
参考: [Adaptivity and Layout](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout)
– Avoid asking for setup information up front.
→ 設定画面は最小限に(カスタマイズ性より汎用性 ※ユーザ意識)

元記事を表示

Xcodeのシミュレータで録画する方法

#環境
Xcode13.1
Swift5.5.1

#シミュレータで使用する方法

1.⌘+⌥+スクショボタンをタップで録画開始。
2.スクショボタンで終了。

※録画が開始されるとこのような表示になります。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409860/af318f35-662c-7fea-209d-dcbfa167cd1a.png)

#ターミナルを使用する方法
録画データはカレントディレクトリに保存されるので、事前に保存したいディレクトリに移動しておいてください。
1.`xcrun simctl io booted recordVideo 任意の名前.mov`で録画が開始
2. ⌃+cで録画終了

エラーが発生する方はXcodeで以下の設定を行ってください。
⌘+,>Locations>Command Line Toolsを設定してください。

元記事を表示

OTHERカテゴリの最新記事