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

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

Swiftのキーパスについて

#キーパスとは
オプショナルチェーンのようにさまざまなインスタンスが互いに参照しあう関係にあった時、あるインスタンスを起点として次々に参照をたどって別のインスタンス参照できることがありますが、そのような経路をインスタンスとして保存したり、関数の引数と指定渡したりすることです。

以下は、ある学生sがクラブに所属している場合、そのクラブに顧問の先生がいればその先生の名前を表示するためのオプショナルチェーンによる記述です。

“`swift
if let name = s.club?.teacher?.name {
print(name)
}
“`

この記述は変数sに対してのみ有効ですが、Student型のインスタンスならばどれに対しても同様な参照を行うことができます。ここで、次のような記述が可能です。

“`swift
let teacherNamePath = \Student.club?.teacher?.name
if let name = s[keyPath: teacherNamePath] {
print(name)
}
“`

この`\Stu

元記事を表示

part1「璃奈ちゃんボード」をiPadだけで自作する

#動画

https://www.nicovideo.jp/watch/sm38393401

#はじめに
最近りなちゃんボードを自作する人が増えていますが、マイコンを使ったり、3Dプリンターを使ったりするのは難しそう……~~高校生の璃奈ちゃんがあんな短期間で工作出来るわけないだろ~~、と思う方も多いでしょう。
私もそう思ったので、より現実的に、iPadやiPhoneだけで「りなちゃんボード」を再現(表示)するプログラムを作りました。
 コンセプトは、
**誰でも,簡単に,どんな時でも使える璃奈ちゃんボード**です。
使用する言語はpython3.xのみです。

#必要なもの
* iOS、iPadOSアプリ「**Pythonista3**」(1200円)
* iPhoneやiPad(原寸大で作るためには9.7インチか、10.2インチ、11インチのiPadが必要)

たったこれだけ!

1200円のアプリは確かに高いですが、このアプリを入れるだけでほとんどのpythonプログラムが実行できるので、初心者の方も玄人の方もおすすめです。今回はPythonista に入っているuiモジュール

元記事を表示

Xcode シュミレーター @が打てない時の対処法

#Xcodeのシュミレーターで「@」が打てない!!!
iOSのシュミレーターでキーボードから記号を入力すると、不思議なことに`@`が`[`になったり、なんだか色々とおかしくなってた。。。

別に`/`とか`:`みたいな記号はユーザー入力で使われることは滅多に無いのでいいんですが、、、

**`@`はログイン周りの処理で使うので、`@`が打てないのは困ります!!**

かといって、シュミレーター内のキーボードを毎回使うのも面倒やし:confused:

#解決法
![スクリーンショット 2021-03-15 22.41.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/b89593a3-3ad5-454f-ad02-7e89c0bfc901.jpeg)

`|/O>Keyboard>Connect Hardware Keyboard`のチェックを外す→もう一度チェックをつける

よくわかりませんが、これだけで正常になりました。。。

元記事を表示

[Swift] Firebase-Authentication(新規登録)を使ってみた

## 概要
Firebaseを使ってみたい!ということで、
サンプルアプリを通して学習していきます。

第一回目は、認証機能を用意してくれているAuthenticationの新規ユーザー登録です。
今回はメールアドレスでの登録を使いました。

※注意
各UIView(部品)はコードで実装しております。
Storyboardを使用しているからは注意してください。

## 完成品

サクッとコードがみたい場合はこちらです。
https://github.com/ksy781/FirebaseAuthentication/blob/main/FirebaseAuthentication/ViewController.swift

## 環境
| ツール | バージョン |
|:-:|:-:|
| Xcode | 12.4 |
| Swift | 5.3.2 |
| Cocoapods | 1.10.1 |
| FirebaseAuth | 7.7.0 |

## 事前

元記事を表示

Firebaseを使用してiOSアプリにプッシュ通知を実装する

#はじめに
Firebaseの`Cloud Messaging`を使用してアプリにプッシュ通知を実装します。

#前提条件
[Apple Developer Program](https://developer.apple.com/jp/programs/how-it-works/)の登録と、[Firebase](https://firebase.google.com/docs/ios/setup?hl=ja)を導入していること前提で書いていきます。

#プッシュ通知の仕組み
iOSの場合、Appleが提供しているプッシュ通知サービス[APNs(Apple Push Notification Service)](https://ja.wikipedia.org/wiki/Apple_Push_Notification_Service)を介して
プッシュ通知を配信しています。

![push_Notification.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743730/93c1d9e3-e7d2-

元記事を表示

swiftのMapKit(基礎)

#フレームワークのインポート
“`swift
import MapKit
“`

#MKMapViewの生成
“`swift
//mapViewの生成
let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
self.view.addSubview(mapView)
“`
#MKMapViewの中心にピンを生成する

“`swift
let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
self.view.addSubview(mapView)
//緯度と軽度
let location: CLLocationCoordinate2D = CLLocati

元記事を表示

[初リリース]Youtubeの複数曲mix動画をSpotifyプレイリストに変換するアプリ

こんにちは!趣味でエンジニアリングをしているcanalunです。こちらが[自己紹介](https://qiita.com/canalun/items/7fb4fda358d282a7af40)です!

去年の12月頃から初めてのiOSアプリ開発に取り組み、紆余曲折を経てなんとか**Youtube-Spotify連携型プレイリスト作成アプリを完成・リリースさせることができました**!
せっかくなので、作成の経緯や苦労したポイントを自分なりにここに書き残してみようかと思います!

なお、アプリストアへのリンクはこちらです?
[mixed!](https://apps.apple.com/jp/app/mixed/id1554637603)

# どんなアプリなのか??
YouTubeには**複数の曲を1つのクリップにまとめた”mix”と呼ばれるタイプの動画**が多く存在します。hiphopやlofiと呼ばれるジャンルの音楽が好きな方は、きっとよくご存知ですよね?

例えばこのような動画です!
[【ネオシティポップとか】Neo City Pop / Japanese Hip Hop etc.

元記事を表示

[Swift5]MessageUIを用いたメール機能(お問い合わせ機能)の実装方法

## やりたいこと
今回はMessageUIを用いたメール機能の実装方法を紹介します。

`メール機能 == お問い合わせ機能`として扱えるかと思います。
ユーザー情報を管理する場合、通報機能としても代用できるのでぜひ参考にしてください!

## 使用するライブラリ
“`swift
import MessageUI
“`

## コード紹介

今回はお問い合わせボタンが存在すると仮定して紹介します。
`@IBAction func tapMailButton(_ sender: Any)`はお問い合わせボタンがタップされると呼ばれます。

“`swift
// お問い合わせボックスをタップすると呼ばれる
@IBAction func tapMailButton(_ sender: Any) {

// メールを送信できるかどうかの確認
if !MFMailComposeViewController.canSendMail() {
print(“Mail services are not available”)
return
}

/

元記事を表示

さよならCocoaPods

`CocoaPods`から`Swift Package Manager`にライブラリの管理を移行するメモ

プロジェクトファイル内のCocoaPods関連の依存を削除する

“`
pod deintegrate
“`

続いて残ったファイルを削除する

“`
git rm -r Podfile Podfile.lock *.xcworkspace
“`

これできれいになったので改めてCocoaPodsで利用していたライブラリをSwift Package Managerを使った形にしていく。
Xcodeのメニューから[File]-[Swift Packages]-[Add Package Dependency]を実行し、githubなどのリポジトリURLを貼り付けていく。

podコマンドがmac OSのバージョンアップで通らなくなっている場合がある。
その場合は以下を実行する。

“`
sudo gem install cocoapods -n /usr/local/bin
“`

元記事を表示

Google AdMob iOS ( Objective-C ) でアダプティブバナーを表示する

# サンプルプログラムを実行してみる

1.手順1

下記のリンクより、 最新バージョンの “Adaptive Banner Example” の ObjC をダウンロードする。
( 記事作成時の最新バージョンは v7.22 )

https://github.com/googleads/googleads-mobile-ios-examples/releases

2.手順2

( 1 ) Mobile Ads SDK をインポートします。

( 2 ) プロジェクトのビルド設定で、[Other Linker Flags] に -ObjC リンカーフラグを追加します。

具体的な作業内容は、下記のリンクの内容を確認してください。

https://developers.google.com/admob/ios/quick-start

3.手順3

プロビジョニングファイルを登録し、iOS Simulators または、実機により実行する。

4.備考

サンプルプログラムは、 Interface Builder により広告を表示するようになっています。
プログラムで表示す

元記事を表示

初めてReact NativeでiOSアプリを開発した時に参考にした記事・サイトたち

JavaScript(フレームワーク未使用)業務経験1年・React/React Nativeもスマホアプリ開発のいろはも分からなかった私が、平日夜・休日の時間を使って、**約2ヶ月(80時間)かけてReact NativeでiOSアプリを開発**したときの流れや参考になった記事・動画を紹介します!

自分自身、何度も壁に打ち当たり、心が折れそうだったので、少しでも役に立てればと思います!

作った単語帳アプリ”*lankiage*”は[こちら](https://apps.apple.com/jp/app/lankiage/id1556840677)(App Store)
ソースコードは[こちら](https://github.com/Hiroyuki1995/lankiage)(Git Hub)

#そもそもReact/React Nativeとは?
**React**は、Facebook社が開発した、WebアプリケーションのUIを構築するためのライブラリです。
JavaScript三大フレームワーク・ライブラリとして、他にVue.jsやAngular.jsがありますが、世界的にRe

元記事を表示

スマホアプリをビジュアルプログラミングで開発できる MIT App Inventor を使い Androidスマホ・iPhone から LINE に通知を送る

## はじめに
これまで以下の記事などを書いてきた、スマホアプリをビジュアルプログラミングで開発できる MIT App Inventor。

– [ビジュアルプログラミング(MIT App Inventor)で開発した Androidアプリから #toio の制御を行う(BLE用の拡張機能を利用) – Qiita](https://qiita.com/youtoy/items/6a8012b7f6f3e69f1eaf)
– [ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【後編:アプリ実装】 – Qiita](https://qiita.com/youtoy/items/b241809c93e8fcef0e26)

今まで、Androidアプリ開発のみに対応していたのですが、作ったものを iOS・iPadOS上で動かすアプリもリリースされました(Android だと APKファイルを生成することもできるものの、 iOS・iPadOS だとそれに相当することはできなそうですが…)。

ReactiveSwiftのActionで発火したSingalProducerをDisposeする方法の検討

# 問題

下記のようなActionがあるとします。

“`swift
class ViewController: UIViewController {
private let action = Action {
SignalProducer { observer, lifetime in
let workItem = DispatchWorkItem {
observer.send(value: ())
observer.sendCompleted()
}

DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: workItem)

lifetime.observeEnded {
workItem.cancel()

元記事を表示

Fire Storageを監視してサイレントプッシュ通知を送信

# 概要
Fire Storageに画像ファイルのアップロードがなされるとCloud Functionsを通してサイレントプッシュ通知を送信します。

今更感はありますが、ググってもpayloadの記述に統一性がなかったりして割と苦戦しました:sweat:

Stack OverFlowの方でも同じ悩みを抱えていた人がいたので参考になれば幸いです。

なお、本記事ではFirebase CLIや証明書周りについては触れません。
下準備ができている前提で進めます。

# 環境
– Xcode 12.4
– Swift 5
– nodejs 12

# Fire Storage
デフォルトバケットを使用

# クライアント
## Capability
TARGETS > CapabilitiesよりBackground ModesとPush Notificationsを有効にします。
Background ModesはRemote notificationsにチェックを入れます。
(バックグラウンドで通知を受け取りたい場合はBackground fetchもチェック)

## Swift

元記事を表示

UnityアプリでiOSをArchiveするとExit status: 65とかUSYM_UPLOAD_AUTH_TOKENがないとかで終わる問題の解決法

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://twitter.com/mogmet)です。

fastlaneを使ってunityプロジェクトをビルド・アーカイブしようとしたら表題の件でエラーが起こったのでその対策の紹介です。

## エラー内容

下記のような内容のエラーが出たりします。

“`
▸ Running script ‘Run Script’
The iOS deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 5.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target ‘leveldb-library’ from project ‘Pods’)
The iOS deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 7.0, but the ra

元記事を表示

TCAでStoreに関する定義をenumでまとめると便利

# はじめに

この記事では、iOSアプリ開発に使われるThe Composable Architecture(略してTCA)のサンプルコードにおいてさまざまな型や関数がグローバルな定義をしているのを、自分で使うときにはどうやって利用しているかということを書いてみます。基本的にTCAを使う人の自由にすればいいことなんですが、これをグローバルでなくすることでまとまりが出ますし、まとめかたとしてcaseなしのenumによりnamespace的にすることで型推論が有効になったり、IDEが補間してくれることで楽できますという話です。

# 最初に結論

私はこういうふうな定義を使ってCoreを定義しています。

“`swift
import ComposableArchitecture

enum MyAwesomeFeatureCore { // MyAwesomeFeatureStoreでもいい
struct State: Equatable {

}

enum Action: Equatable {
case onAppear

元記事を表示

[Quick/Nimble] M1 MacでfatalErrorのテストを(しなくていいように)するには [Swift]

# TL;DR

M1 MacではNimbleの`throwAssertion()`マッチャーは使えない。
そもそもアサーションはテストしづらいので、なるべくアサーションが発生しないようなロジックに修正したり、アサーションの代わりにErrorで代用するのが良いと思う。

# 本文

こんにちは。 @zrn-ns です。

最近暖かくなってきましたね。
とても過ごしやすいなあと感じるとともに、アレルギーで鼻と喉が大変なことになってます。
花粉症の特効薬はまだですか。

# Quick/Nimbleの`throwAssertion()`マッチャー、便利ですよね

iOS向けのテストフレームワーク[Quick](https://github.com/Quick/Quick)のサブプロジェクトとして公開されている[Nimble](https://github.com/Quick/Nimble)には、fatalErrorやpreconditionFailureなどのアサーションを検知する事ができる [`throwAssertion()`マッチャー](https://github.com/Quic

元記事を表示

iOSのパーミッションテキストが日本語化されないとき

iOSアプリでLocalizeを使用して多言語化対応しており、iPhoneの使用言語を日本語にしているにもかかわらず、パーミッションのテキストが`Info.plist(English)`に設定しているものが使用されてしまう。

![スクリーンショット 2021-03-13 13.50.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/f1393c8f-89fc-540b-0925-5d98f52b8b52.png)

XcodeのLocalizationsで`Japanese(ja)`ではなく`Japanese(Japan)(ja-JP)`を使用するとパーミッションテキストが日本語になった。

元記事を表示

UITest実行にCoreDataのデータをクリーンアップ

ググっているとdocumentDirectoryを削除するとか色々出てくるのですが、ファイルまで消さなくてもオブジェクトだけ簡単に削除できたら良いやと思ったので、自前で実装してみました。

# コードと解説
AppDelegateなどに、以下のコードを記述してください。

1. 万が一のことがないようにCompilation Conditionsを利用してリリースビルドでクリーンアップ処理が混入しないようにしています。
2. ProcessInfoを利用して注入された環境値を読み取って、UITestであればクリーンアップ処理を実行します

“`swift
#if DEBUG
if ProcessInfo.processInfo.environment[“UI_TEST”] == “1” {
CoreDataStack.shared.cleanUp()
}
#endif
“`

CoreDataを管理しているクラスなどで以下のコードを記述してください。

1. こちらも同様に#if DEBUGを利用してリリースへのデバッグコード混入を避けています。
2. 全てのエンティティに

元記事を表示

iOSビルドでJson.NETを使おうとするとNotSupportedExceptionが出てしまう

Unity で Newtonsoft の Json.NET の dll を直接取り込んで使っていると、Windowsアプリ、Androidなどで問題がなくても、iOSビルドして実行すると NotSupportedException が発生してしまいます。解決する際に参考にした情報を基に、以下にまとめてあります。

# 対応方法
本家を folk して、PackageManager 経由で Unity に取り込めるように対応してくれているリポジトリがあります。そのリポジトリに向けた設定を Unity に入れることで、iOSビルドでもエラーが出ることなく使用できるようになります。

# 設定方法

1. PackageManager でのインストールが 2018.1 からなので、それ以上のバージョンの Unity でないと設定できません。

2. `/Packages/manifest.json` に以下設定を足してください。バージョン番号はリポジトリの[タグ](https://github.com/jilleJr/Newtonsoft.Json-for-Unity/

元記事を表示

OTHERカテゴリの最新記事