iOS関連のことを調べてみた2020年05月28日

iOS関連のことを調べてみた2020年05月28日
目次

【Swift】選択上限のある複数選択可能なTableViewの実装+スクロールしてもチェックマークがズレないようにする

選択上限をつけた複数選択可能なTableViewの実装が調べても出てこなかったので、簡単に作ってみました。

##### 今回実現したいTableView

1. 複数選択可能
2. 選択状態がスクロールによって他のCellにズレない
3. 選択できる数に上限をつける

[サンプルプログラム](https://github.com/asa08/multiple-select-table)

## 1. 複数選択を可能にする
“`MultipleTableView.swift
// tableViewのisMultipleTouchEnabledをtrueにする
isMultipleTouchEnabled = true
“`
これだけで複数選択が可能になる。

## 2. 選択状態がスクロールによって他のCellにズレない
`Model`に選択状態を持って、その値を元に`Cell`を`init`する。

“`MultipleTableView.swift
func tableView(_ tableView: UITableView, cellForRowAt indexPat

元記事を表示

iOSにユーザーデータを保存する方法と、そのためのコードの書き方: UserDefaults、Core Data、Key Chain、CloudKit

データの保存はiOSアプリの持つ主要な機能です。たとえば、ユーザーが指定した色などの環境設定を保存したり、ウェブサイトのトークンをアプリに保存したり、ToDoリストのアプリを作ってタスクを保存したりすることができます。データをシステムに保存する方法はいくつもあります。

## 目次

[User Defaults](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#user-defaults)
[Core Data](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#core-data)
[Keychain](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#keychain-キーホルダー)
[iCloud CloudKit](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#cloudkit)

この記事では、上記の方法それぞれについて、サンプルコ

元記事を表示

tns run iosよ、あなたはなぜiPad Airを起動するのか?NativeScript-VueのiOSエミュレータの初期デバイスをiPhoneに変更する

# TL;DR

`package.json`に

“`
“scripts”: {
“ios-iphone”: “tns run ios –device ‘iPhone 8′”
},
“`

を追加する

# 教えてくれた人

# tns run iosよ、あなたはなぜiPad Airを起動するのか

NativeScript−VueのアプリをMac OS Catalina10.15.4で開発中にiOSエミュレータを`tns run ios`(デフォルト)や`npm run serve:ios`(`vue-cli-plugin-nativescript-vue`でコードシェアリングしている場合)で起動すると、iPad AirのSimulatorが起動する。
image.pngUIWebViewを使っているFrameworkを探す

アプリにUIWebViewが含まれている場合、App Store Connectへのアップロード時にITMS-90809の警告がメールで送信されたりするかと思います。

> ITMS-90809: Deprecated API Usage – App updates that use UIWebView will no longer be accepted as of December 2020. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

警告にもある通り、既存アプリでUIWebViewを利用している場合は2020年12月で受け付けがされなくなるようなので、それまでに対応が必要です。
(参考: [ウェブビューを使ったAppのアップデート \- ニュース \- Apple Developer](https://developer.apple.com/jp/news

元記事を表示

iOSアプリにYouTube動画を埋めこもう2020

iOSアプリにYouTube動画を埋めこんだので、その覚書です。

# 基本
YouTubeの公式ドキュメントを見ると、[YouTube-Player-iOS-Helper](https://github.com/youtube/youtube-ios-player-helper)というOSSを使うのを推奨されます。
基本WebViewをベースに、いい感じのサイズにしたYouTube動画を埋めこんで、コントローラーをつけるという感じです。

(公式ドキュメント)
[Embed YouTube Videos in iOS Applications with the YouTube Helper Library](https://developers.google.com/youtube/v3/guides/ios_youtube_helper)

(わかりやすいチュートリアル)
[[Swift] YouTube-Player-iOS-Helper を使って YouTube 動画を再生してみる](https://dev.classmethod.jp/articles/youtube-pla

元記事を表示

俺の嫌いなXcodeが5秒でイチオシ開発環境に

iOS開発者の皆さん、毎日、ハッピーな開発ライフ過ごしてますでしょうか。

楽しい開発には快適な開発環境は欠かせませんが、もちろんiOS開発者の皆さんが使うのはXcodeですよね。
いや、俺はAppCodeという人はそっとタブを閉じましょう。

JetBrain製品、良いですよね。Android Studio も素晴らしい。どんな言語でも同じ様な操作感で。でもちょっともっさりしてるんだよな。
その点、Xcodeは動きはキビキビしていて玄人プログラマー好み。

でも一つ、**すごく嫌なところ**がありました。これさえ直してくれれば最高なのに。

普通、Xcodeって編集する時、複数のタブ開くじゃないですか。自分の場合はこんな感じ。
![スクリーンショット 2020-05-27 15.16.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22218/cfe2f4de-72cd-803b-226e-ffd2c3c488fa.png)
Storyboardと関連のソースファイルを幾つか。そして、デバッグする

元記事を表示

SwiftのReverse GenericsというかOpaque Typeの紹介(社内勉強会用)

# Swiftとは

[Wikipedia](https://ja.wikipedia.org/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) より

> Swift(スウィフト)は、アップルのiOSおよびmacOS、Linuxで利用出来るプログラミング言語。Worldwide Developers Conference (WWDC) 2014で発表された。アップル製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存することが意図されている。

swift.org [Language Guide](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html) より

> Swift is a type-safe language, which means the language helps you to

元記事を表示

FirebaseCrashlyticsで強制クラッシュさせる時の方法が変わっていたお話

# 環境
– Xcode 11.4
– Swift 5.2
– FirebaseCrashlytics 4.0.0-beta.5

# 概要(2020/05/27時点)
FirebaseCrashlyticsで強制クラッシュをさせようとしたら、以下の二点で微妙に詰まったのでメモ書きとして残しています。
– シングルトンインスタンス取得の方法が変わっていた
– 強制クラッシュを起こすメソッドが消えていた

## シングルトンインスタンス取得
#### 以前のver
“`swift
Crashlytics.sharedInstance()
“`

#### 現在のver
“`swift
Crashlytics.crashlytics()
“`

## クラッシュさせる
#### 以前のver

“`swift
Crashlytics.sharedInstance().crash()
“`

#### 現在のver
公式ドキュメントによると `fatalError()` を使えとのこと。

“`swift
fatalError()
“`

# 引っかかった原因
日本語のドキュ

元記事を表示

Wi-Fiオンオフ両方をこなせるショートカットを作ろう

## 前置き
iOSショートカットを使うと、Wi-Fiを完全にオフにできるので便利です。
ただ、「Wi-Fiオンの方も作ってホーム画面に配置する」となると二つもアイコン枠が必要なので少し邪魔です。
そんな問題を解決するために、「Wi-Fiオンオフを切り替えられる(=トグル式)ショートカット」を昔作ったので備忘録として書いておきます。

## レシピ
![4EF57D4E-F0CF-4C43-8C29-84AD064E93D0.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561438/5c55a4da-d7d9-24d7-8274-bc45d523d9ee.jpeg)

ショートカットからホーム画面に戻る方法はいくつかありますが、[supermamon](https://routinehub.co/user/supermamon)さんの[Springboard](https://routinehub.co/shortcut/2900)を使って戻る方法がぶっちぎりで早いのでおすすめです。

## 実際に

元記事を表示

Flutter + Firebase (FCM) でiOSのPush通知の実装

Flutter + FCM (Firebase Cloud Messaging) でiOSのpush通知を実装したのでその際のメモ。

## 参考にしたドキュメント
基本はFlutterのFCMプラグインのドキュメント通りに進めればできる。
https://firebaseopensource.com/projects/firebaseextended/flutterfire/packages/firebase_messaging/readme/

Githubにexampleもある。
https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_messaging/example

こちらのDevelopers.IOの記事には具体的な実装例が書いてあって、参考になった。
https://dev.classmethod.jp/articles/flutter_fcm_push1/

## デバッグ

自分の場合はドキュメント通りに進めても何故かPush通知が成功せず。。。
デバッグの仕方もわか

元記事を表示

Xcode11でのsetting.bundleのバージョン更新スクリプト

Xcode11からVersionとBuildは、MarketingVersionと、CurrentProjectVersionで管理されるようになりました。
これにより、Settings.bundleのバージョン更新スクリプト変更しないと悲しい状態になるので対応したメモ。

“`shell
APP_VERSION=”$MARKETING_VERSION”
/usr/libexec/PlistBuddy -c “Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist”

BUILD_NUMBER=”$CURRENT_PROJECT_VERSION”
/usr/libexec/PlistBuddy -c “Set :PreferenceSpecifiers:2:DefaultValue ${BUILD_NUMBER}” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Se

元記事を表示

Qiita の記事の閲覧数とLGTMの数を表示するiOSアプリを作成

## この記事の内容について

Screen Shot 2020-05-26 at 4.54.30 PM.png

Open-Source Source code / オープンソース: https://github.com/mszmagic/Qiita-Contribution-Counter

この記事では、いくつかのヒントや私がアプリで使用した技術について説明しています。どちらかというとケーススタディのようなものです。

– ローカルデバイス上でユーザーのトークンを保存する
– 既存のウェブクッキーを使用してモバイルアプリケーションにユーザーをログインさせる
– `URLSession` を使用して `GET requests` を作る
– Swift でJSONレスポンスを解析する
– リモートサーバーから画

元記事を表示

“Could not find a storyboard named ‘Main’ in bundle NSBundle”に遭遇した時

### 環境
– macOS Catalina 10.15.4
– Xcode11.4
– TargetSDK iOS13.4

### いつ遭遇したか
iOSアプリを作る際に、最初に表示したい画面の名前を変えたかったので、`Main.storyboard`のファイル名を`Sample.storyboard`に変えてビルドすると、画面が描画されずに

“`
Could not find a storyboard named ‘Main’ in bundle NSBundle
“`
と表示されてクラッシュした。

**[Could not find a storyboard named ‘Main’ in bundle NSBundle 対処方法](https://qiita.com/kakipo/items/f93cc2bdc8b36b67adbb)**を参考に、info,plistの`Main storyboard file base name`を消したり、`Sample`に変えても効果なし。

## 解決方法
Xcode全体に`Main`で検索をかけてみると、info.pli

元記事を表示

create-react-native-moduleのexample/iosのビルドに失敗する

## 現象
`create-react-native-module`を使ってNativeModuleを作成しようとしたところ、iosでビルド失敗してシミュレータが起動しなくなってしまった。

“`sh
$ create-react-native-module –generate-example Example
“`

## 実行環境
実行環境は以下です。
– Xode 11.5
– Cocoapods 1.9.1 (from brew)
– react-native 0.62.2
– create-react-native-module 0.19.0

`react-native ios` ではビルドに失敗して起動しなかったが、Xcodeではビルドしてシミュレータを起動することができた。
Cocoapods側の不具合にでもあるのかなと推測。

## 修正内容

Yogaに関するエラーが出ていたので、StackOverflowで似たようなことを書いてある記事を探してトライ&エラーで試してみた。
上手くシミュレーターが立ち上がったの解決策のものはCocoapodsの不具合に言及してい

元記事を表示

Swiftによるアプリ開発のためのComposable Architectureがすごいので紹介したい

# はじめに

Swiftを用いたiOS/macOS/tvOS/watchOSアプリ開発用に [Composable Architecture](https://github.com/pointfreeco/swift-composable-architecture)というのがあり、それがめっちゃ良いやん!と思ったのでそれを書いておきます。フレームワーク的に提供されていますが、特にSwiftUIを使ってどういう構成でアプリを作ろうかと考えている人がコードを読むだけでもとてもいい教材になると思います。

Composable Archtectureを提案しているのは、関数型プログラミングとSwiftについての動画コンテンツ提供している[Point-Free](https://www.pointfree.co/episodes/ep100-a-tour-of-the-composable-architecture-part-1)というサービスを提供している方たちです。

# 必須要件

Composable Architectureの必須要件を先に書いておきます。

– iOS13以上

元記事を表示

UIButtonに隠しActionをつける方法

# はじめに
ただどう動くんだろう?って言うだけの話で実用性は皆無です:innocent:
なんか UIButton に謎のアクションを付けれたというお話です。

# 環境
* Xcode 11.4
* iPhone 11 Pro Max (13.4)

# 実装
1. StoryboardでFirstViewControllerとSecondViewControllerを用意する
2. FirstVCにボタンをのせる
3. IBActionでボタンのアクションをFirstVCに紐付ける(`tappedFirst(_ sender: Any)`)
4. SecondVCにFirstVCのボタンをコピペする
5. IBActionでボタンのアクションをSecondVCに紐付ける(`tappedSecond(_ sender: Any)`)

こんな感じ

storyboardiOSアプリの GitLab CI/CD 環境を整える(コードレビュー編 SwiftLint, Fastlane, Danger)

# はじめに

## 本記事のゴール
iOSアプリのGitLab CI/CD環境を整えたい!

ということで、第一弾はコードレビュー編です。

以下のキャプチャのようにMerge Request作成時に自動でSwiftLintを実行+実行結果をコメントに残すことで、コードレビューを円滑にし品質向上に繋げることを目的としています。

![スクリーンショット 2020-05-26 15.19.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121942/a041f6ff-f71d-55d4-c422-d8b642006aab.png)

## 環境
– macOS(ビルド用):macOS Catalina 10.15.4
– Xcode:11.4.1
– Swift:5.2.2
– SwiftLint:0.30.1
– Danger:8.0.0
– Danger Gitlab:8.0.0
– Danger Swiftlint:0.24.2
– Fastlane:2.148.1
– GitLab CE(

元記事を表示

[Swift5][FAB]フローティングアクションボタンの作り方

フローティングアクションボタンの作り方。

####実装イメージ
TableViewCellの上に浮いてるデザインで、スライドしても固定されるように実装します。
スクリーンショット 2020-05-26 15.49.12.png

####Storyboard
まずbuttonのみを置いてAutoLayoutをつけます。
スクリーンショット 2020-05-26 15.54.30.png
スクリーン</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>UIButton</div>
<div class='tag-cloud-link'>Swift</div>
<div class='tag-cloud-link'>FAB</div>
<div class='tag-cloud-link'>Swift5</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/lsk4f5/items/2cc139d20ee1ef0da22f'>元記事を表示</a></div>
<h3 id=[Swift5] TextFieldのあるAlertを表示させる方法

SwiftでTextFieldのあるAlertを表示させる方法。

#### 実装イメージ
このようなタイトル、サブタイトル、入力欄、キャンセル、追加で構成されたAlertを作成して行きます。
スクリーンショット 2020-05-26 14.57.09.png

#### Storyboard
buttonを押すとAlertが表示されるようにするため、好きな場所にbuttonを1つ追加しましょう。
スクリーンショット 2020-05-26 14.19.46.pngmonacaでcordova-plugin-admob-freeを使った広告表示

少し面倒だったので忘れないようにメモしておきます。
admobで「ca-app-pub-」から始まるapp idを取得していることが前提です。

## ビルド環境の設定

– monacaクラウドIDEでビルド→ビルド環境の設定→iOS5.1.1を選択して保存する。
– monacaクラウドIDEで設定→JS/CSSコンポーネントの追加と削除→Monaca Core Utilityのバージョンを2.1.0以上に上げる。
– monacaクラウドIDEで設定→iOSアプリ設定→WebViewエンジンにWKWebViewを指定して保存。

## プラグインを用意する

#### cordova-admob-sdk
以下のサイトからv0.24.1のzipをダウンロードしました。
[cordova-admob-sdk](https://gitlab.com/ratson/cordova-admob-sdk)
#### cordova-plugin-admob-free
以下のサイトからv0.27.0のzipをダウンロードしました。
[cordova-plugin-admob-free](htt

OTHERカテゴリの最新記事