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

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

Immutable value “number” was never used; consider replacing with “_” or removing it

## たまに見るやつ。

たまに見る警告。そして、自然と消えるやつ。⚠️
いちいち投稿するまでも無いかもだけど、一応まとめておきます。

## Immutable value “number” was never used;

`for`構文とかで、まだ中身書いてない時に、
一時的に発生する警告。

“`swift
Immutable value “number” was never used; consider replacing with “_” or removing it
“`

“`swift
for number in 0…4 { // Immutable value “number” was never used; consider replacing with “_” or removing it
// まだ中身書いてない。
}
“`

「”number”は**使われてない**から、”**_**”に置き換える、もしくは**削除**することも考え直したらどう?」

と、言われています。

### 「 _ 」 とは?
`「その値は使用しない」` という意

元記事を表示

自作ライブラリ Carthage CocoaPods 公開を CI で自動化

GitHub Actions を利用し、Release 作成タイミングで、ライブラリ公開作業を自動化しましょう!

# 前提

– `Release` の作成 (= `tag` 作成) は手作業で行うものとします。
この記事で行う自動化は、Release 作成をトリガーとして行うものです。

– https://github.com/yuki0n0/WaveSlider/
解説するものは、こちらのライブラリを作成したときの情報に基づいています。
よかったら GitHub で **Star ★** つけてね。

– https://qiita.com/yuki0n0/items/290c6ab753634e7395f5
ライブラリ公開の手続きなどはこちらで解説しております。

– CI は GitHub Actions を利用しています。
大したことはやってないのでお好きな CI で読み替えてください

# CocoaPods

今回やることは下記です。

– `pod trunk push` を CI で自動的に実行

元記事を表示

iOS13 で UILabel のスタイルが間違えて表示されている可能性がある

### 起きたこと

UILabel の `attributedText` を nil (リセット) にしてもラベルのスタイルが変わらないという現象が発生していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/2e9a89b3-6880-1951-1262-7507cb8e308a.png)

### TL;DR

#### 原因

UILabel の attributedText の値が nil(リセット)になった場合、通常(iOS12以前)は Label の attributes もリセットされるが iOS13 ではリセットされないとの[報告](https://developer.apple.com/forums/thread/121366)があり、それが起因して考えられます。

#### 解決策

UILabel の `text`・`attributedText` はどちらか一方の値が変わるともう一方の値も変わるという連動性があることから(下記ドキュメント

元記事を表示

Swift でアプリ内アイテムフィルタリングを実現する話

# 前書き
こんにちは、リビリンです。日本語も記事書きも初心者です。

この記事はジェネリックタイプと関数型プログラミングのテクニックを使ってフィルタリングを実現する方法を紹介します。読むには、Swift の[ジェネリックタイプ](https://docs.swift.org/swift-book/LanguageGuide/Generics.html#ID189)と、ちょっとした関数型プログランミングの概念が必要です(といっても`filter`と`sorter`のような高階関数とクロージャが理解していれば大丈夫です)。

# 背景
自作アプリの[「‎デレガイド2」](https://apps.apple.com/us/app/%E3%83%87%E3%83%AC%E3%82%AC%E3%82%A4%E3%83%89-2-for-%E3%83%87%E3%83%AC%E3%82%B9%E3%83%86/id1493630000)は、アイドルリズムゲーム[「アイドルマスター シンデレラガールズ スターライトステージ(デレステ)」](https://cinderella.idolmaste

元記事を表示

Dart vs Swift

| 作者 : Andrea Bizzotto
| 原文 : [medium](https://medium.com/coding-with-flutter/dart-vs-swift-a-comparison-6491e945dc17)
| 翻訳 : [jamestong](https://qiita.com/jamestong)
| 校正 : [jamestong](https://qiita.com/jamestong)

DartとSwiftは私のお気に入りの2つのプログラミング言語です。私は商用およびオープンソースのコードでこれらを幅広く使用してきました。

この記事では、DartとSwiftを並べて比較してみます。

– 両者の違いを強調する;
– 開発者の参考として、一方の言語から他方の言語に移行する(または両方を使用する)時の注意点を挙げる。

背景:

– Dartは、単一のコードベースから美しいネイティブアプリを構築するためのGoogleのフレームワークであるFlutterに対応している;
– Swiftは、iOS、macOS、tvOS、watchOSにまたがるAp

元記事を表示

実践・新規モバイルアプリ開発の手順(iOS)

久しぶりに新規アプリ開発をしていて、改めて手順を確認しました。

## 前提

実際の開発では多くの場合、要件定義、設計、API開発、デザインがある程度並行で走るため、仕様がフワフワした状態で着手することが多いです。
その際にどのように立ち回るのがよいか。また、複数人で開発する場合にどのように作業分担するか書いてきます。
なお、設計方針はオーソドックスなMVCで、アプリの構成は一般的なAPI通信をするサービス系アプリと想定します。
設計方針やアプリの構成が異なる場合は読み替えてください。

このフローは何案件かで新規開発を行った人であれば頭の中で構築しているのでしょうけど、言語化されてるのはあまり見かけません。

## 利用方法

– どういうタスクが存在するか確認
– 今の状態でできることは何かを見つける
– 今やってるタスクの意味を理解する
– 今やってるタスクが他のタスクとどう繋がっているか確認する
– 残タスクに対して何の資料や仕様か、何がブロック要因なのか確認する
– 進捗の目処を立てる

## iOSアプリの新規開発フロー

既に仕様が全て揃っている状態からスタートする場合

元記事を表示

【Swift】バックグラウンド的な処理をタイマーで実装してみた

どうも、ねこきち(@nekokichi1_yos2)です。

Swiftにはバックグラウンド処理を実装する方法はありますが、
・**特定の用途に限定**
・**汎用的な方法もあるが短時間**
・**長時間の方法はAppleが推奨してない**
・**処理が安定しない**
の理由で扱いが難しいです。

しかし、簡単な処理ならば、バックグラウンド処理のメソッドを使用しなくても、バックグラウンドは実現できます。

**そこで、デリゲートを使って、バックグラウンドに対応したタイマーを実装します。**

## 解説

実装する機能は、
・タイマー
・バックグラウンドとのやりとり
・デリゲート
の3つ。

処理の流れは、下記の通り。
1. ボタン押下
2. タイマー起動
3. バックグラウンドに移行
4. アプリ画面に復帰
5. バックグラウンドでの経過時間を残り時間から引く
6. タイマー終了

使用するのは、
– backgroundTimer.swift
– SceneDelega

元記事を表示

【Flutter】Pigeon を使ってネイティブコードを型安全に呼ぶ

## はじめに
先日の、 [ Flutter 1.20 のリリース記事 ](https://medium.com/flutter/announcing-flutter-1-20-2aaf68c89c75)で、[ Pigeon ](https://pub.dev/packages/pigeon) というパッケージの紹介がありました。
本来 Flutter 側からネイティブコードを呼ぶには、関数名や引数などを文字列ベースで合わせる必要があるなど、少し大変ですが、このパッケージを使うことで、

* ネイティブ側と__型安全に通信__
* 自動生成よる__手書きコード量の削減__

が可能になります。

本投稿では、このパッケージを使って、__swift / Kotlin で実装した単純な add メソッド__を Flutter 側 から呼ぶ方法を見ていきます。サンプルプロジェクトは[こちら](https://github.com/nskhei/flutter_pigeon_practice)で公開しています。

## Pigeon が行うこと
Dart 側で定義した、引数や戻り値の情報を

元記事を表示

Swiftで画像を丸くする方法(かんたん!)

imageViewのレイヤーのcornerRadiusというプロパティにviewの横幅の半分の値をセットすると、きれいな円になってくれます。

“`swift
sampleImage.layer.cornerRadius = sampleImage.frame.width / 2.0
“`

![IMG_4346.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/403dfb11-493b-90c9-405b-4342b177e251.jpeg)

# 参考文献
– https://developer.apple.com/documentation/quartzcore/calayer/1410818-cornerradius

元記事を表示

GitHub奮闘記②【手順まとめ】

## ㊗︎ 初 push

用語に続いて、この勢いで 手順もまとめます。
[**GitHub**](https://github.com/)のユーザー登録は済ませて下さい。

## 手順

### 0.最終的に、こんな感じ。

「GitTestProject」というリポジトリ名。
`initial Commit`に加えて、追加したCommitが反映されています。

push出来てた!.png

### 1. gitの初期設定?
Gitに**「ユーザ名」「メールアドレス」**を登録します。
GitHubと同じものを指定しておくのが良いです。

以下のコードを元に、ターミナルで設定します。(1行ずつ)

“`swift
git config –global user.name “ユーザー名”
“`

“`

元記事を表示

GitHub奮闘記①【用語まとめ】

## ㊗︎ 初 push

先日まで push が出来なかったのですが、

**gitの初期設定**をしていなかった事が原因でした。
以下のコードを元に、ターミナルで設定します。(1行ずつ)

“`ruby
git config –global user.name “ユーザー名”
“`

“`ruby
git config –global user.email メールアドレス
“`

####ターミナル ?

Xcode内にターミナルは無いですが、**Macに標準インストール**されてます。
`Finder -> アプリケーション -> ユーティリティ -> ターミナル`

## 用語

#### 「リポジトリ」 (repository)
- **ソースコードを管理**する単位。
-「**保管場所**」をカッコ付けて言った表現。
-「ローカル」と「リモート」 がある。
- ローカルリポジトリで作業を行い、その作業内容をリモートリポジトリへpush。
- 
[**今さら聞けない!GitHubの使い方【超初心者向け】**]
(https://techacademy.jp/

元記事を表示

[SwiftUI]Buttonのカスタマイズ

SwiftUIでButtonのカスタマイズ方法を調べました。
カスタマイズ方法はUIKitのUIButtonとだいぶ違ったので、試行錯誤に時間がかかりました。

## どのようなボタンを作るか

– 背景が塗りつぶしで角丸
– シャドーがある
– ボタンを押した時のエフェクトをつける

## 作成したもの

|Playground|
|—|
|スクリーンショット 2020-08-08 11.52.12.png|

– 1つ目:角丸の通常ボタン
– 2つ目:角丸の無効状態のボタン
– 3つ目:角丸が完全な丸のボタン

## 実装方法

SwiftUIの[ButtonStyle](https://developer.apple.com/documentation/swiftui/buttonstyle)を使います。

元記事を表示

[swift]エラーThread 1: Exception: “App ID not found. Add a string value with your app ID for the key FacebookAppID to the Info.plist or call [FBSDKSettings setAppID:].”の対処法

## エラー内容
Firebaseを用いてFacebookログインを実装しており、シュミレーター(実機)でログインボタンをクリックし動作確認を行った際に、画面遷移されずアプリケーションがフリーズしてしまうエラーです。

Xcodeを確認したところ`Thread 1: Exception: “App ID not found. Add a string value with your app ID for the key FacebookAppID to the Info.plist or call [FBSDKSettings setAppID:].`というエラーが発生しておりました。

**環境▼**
Swift version 5.2.4
Xcode version 11.6

## 仮説
エラー文を翻訳すると**”アプリのIDが見つからないので、info.plistにアプリIDを登録するか、[FBSDKSettings setAppID:]を用いて文字列の値を追加するかをして下さい。”**

というようにまとめることができます。

エラー文を元に仮説を立てると…

**仮説①

元記事を表示

[Unity]iosでキーボードから文字入力をする&キャンセル処理

# 概要
環境
`Unity 2019.4.5f1`
`Xcode 11.6`
`ios 13.5.1`

InputField公式リファレンス
https://docs.unity3d.com/2019.1/Documentation/ScriptReference/UI.InputField.html

# InputField
InputFieldはPCだとキーボードから入力可能だが、スマホへBuildするとスマホのキーボードが出てきて入力が可能になる。

実装は簡単で、Create/UIから選択するだけでいろいろ整えてくれたオブジェクトを出してくれる。
こちらでやるべき部分は下のコード部分。

“`c#:InputFieldManager.cs
using UnityEngine.UI;

public class InputFieldManager : MonoBehaviour {

private InputField inputField;
public string resultText; // 入力されたテキストを格納

void Start(

元記事を表示

SwiftFormat(0.45.0以降)で想定外の整形結果になったので解決方法をまとめました

# はじめに
私のチームではソースコードを綺麗な状態で保つために、OSSの[SwiftFormat](https://github.com/nicklockwood/SwiftFormat)を利用してソースコードの自動整形(フォーマット)を行なっています。
今回、[SwiftFormat](https://github.com/nicklockwood/SwiftFormat)を**0.45.0以降**にアップデートしたところ、今までは自動整形されていなかった箇所まで変更されてしまう事象が2つ発生したため、解決方法についてまとめました :thumbsup:

# 実行環境

| 環境 | バージョン |
|:–|:–|
| macOS Catalina | 10.15.6 |
| Xcode | 11.6.0 |
| SwiftFormat | 0.45.0以降 |

# 発生した事象その1

次のように、修飾子の順番が変更されてしまう事象が発生しました。

“`diff
– convenience required init?(hoge: Hoge) {
+ required

元記事を表示

ViewController.swiftのデフォルトコード【overrideとか、superとか】

## overrideとか、superとか。

簡単にまとめます。??

### 前提

-親クラス(別名: スーパークラス)
-子クラス(別名: サブクラス)

(英 super: 「超〜」以外に、**リーダー、監督、管理人**、なんて意味もある。)

### override?

`override`は、親クラスのメソッドに何か書き換えて使いたい時に使えます。

**継承**して出来た**子クラス側で**、**親クラスのメソッドを再定義**するのが`override`です。
なので、「継承 =override」ではないです。?

(英 override: 上書き)

### super?

overrideされる前の親のメソッドを、**明示的に**呼びたい時に使います。

>overrideを行った場合には`メソッド名が同じ`になるので、
**そのままでは親クラスのメソッドを呼び出すことができません。**

**super = “親クラスそのもの”を指す**
(`super.メソッド名`、使い方はこんな感じ。)

“`ruby

class ViewController: U

元記事を表示

iOS14でエンジニアがすべきIDFA対応

# はじめに
9月リリースが噂されているiOS14から、
iOS13まで端末単位で設定していたIDFAの取得許可(追跡型広告制限)
![iOS13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119392/a7dae1ab-953e-7d59-67a0-2e3e8ec652fc.jpeg)

が端末兼**アプリ単位**の取得許可に変更され、
各アプリにて、通知や位置情報許可のように、ユーザに許可を取る必要がでてきます。

IDFAとは?iOS13と比較した詳しい挙動の違いは?は
こちらの素晴らしい記事にまとまっていたので割愛させていただきます。
https://qiita.com/yofuru/items/213b88b85553631204e4

重要なのは**iOS14対応していないアプリはIDFAを取得できなくなることです**。

本記事では実際にエンジニアがiOS14リリースまでに対応する必要がある実作業をまとめます。

*※本記事はbeta4時点の情報です、beta版のスクリーンショットは

元記事を表示

ARKitでDepthDataの深度情報を取得する方法

## はじめに
この記事ではARKitを使ってフロントカメラからDepthDataを取得し、1pixelずつの深度情報を取得する方法を備忘録的にまとめます。
もしかしたらフロントカメラ以外にも使えるかもと思い、タイトルは少し広い内容をカバーできるようにしました。

いろんな事情でiPhone11で顔認識をした時に深度情報がfloatで欲しいと思い、いろいろ調べたんですが、一つにまとまった記事が存在しなかったので、深夜テンションで記事を作ろうと思いました。
(筆者はSwiftを勉強しはじめて数ヶ月のド素人なので、コードや文章の書き方が拙いかもしれませんがお許しください…)
(改善点や技術的補足がある人は大歓迎です)

## 対象となる人
– ARKitで深度情報が欲しくなった人
– (TrueDepth搭載のiPhoneのフロントカメラを使用する人)
– ポインタという概念がちょこっとだけ分かる人

## 筆者の環境
– Xcode11.6
– Swift
– iPhone11
– iOS13.5

## 要約
– CVPixelBufferをコネコネすればできる
– UnsafeM

元記事を表示

iOS シミュレータで動画を収録して gif に自動で変換するスクリプトを書いた

– 知人に作ったアプリを見せたり
– SNS に投稿したり
– Pull Request のメッセージで動作を説明したり

するときに iOS シミュレータの動画を収録 → gif に変換ということを頻繁に行いませんか?
僕もそうで、特に Github の Pull Request で実装した様子を手軽に見せる手段として gif 画像を使います。

でも、毎回 収録 → gif に変換の手順を踏むのが面倒になったので適当にシェルスクリプトを書いてみました。

## 要求

– iOS シミュレータの動画を収録して gif として output するのを 1 コマンドで解決する
– ファイル名はなんでもいい
– だけどできれば収録した順に並んでると嬉しい

## 設計

### iOS シミュレータの動画を収録して gif として output するのを 1 コマンドで解決する
これに対してはシェルスクリプトを作るということで解決します。

### ファイル名はなんでもいい
ファイル名に制限は設けません。

### だけどできれば収録した順に並んでると嬉しい
最初はランダムな文字列.gi

元記事を表示

Fastlane Match利用中にProvisioning ProfileをApple Developer Program上で誤って削除しちゃったら

Apple Developer Program上で複数のApp IDを管理してると、期限切れや利用不可の証明書とProvisioning Profileを一掃してくれるコマンド`fastlane match nuke`が使えなくてハマったのでメモです

## 前提
– Fastlane Matchで証明書/Provisioning Profileを管理
– 1つのApple Developerアカウントで複数のアプリ(App ID)を管理

## 現象

Fastlane Matchで生成されたProvisioning Profileを[Apple Developer Program](https://developer.apple.com/account/resources/profiles/list)で直接削除したら、

“`
$ fastlane match development
“`

コマンドを実行したときに以下のエラーが出てきた
> [15:50:22]: Provisioning profile ‘XXXXX’ is not available on the Dev

元記事を表示

OTHERカテゴリの最新記事