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

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

【 Swift 基礎 】 ARC, 弱参照, 強参照, 循環参照

ARC, 弱参照, 強参照, 循環参照についてまとめます。
[公式 documents](https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html) を参考にまとめましたので、もし分かりづらい点があればそちらを参考にして下さい (泣)

## ARC (Automatic Reference Counting)
ARC とは **Swift のメモリ管理**の方式です。より具体的にいうとクラスのインスタンスが使用するメモリを、どのタイミングで解放するかが定義されています。

もう使用しないインスタンスをずっと記憶していても容量の無駄ですから、『その取捨選択をしっかりとしましょうね』というお話です。

ではどのタイミングで、インスタンスが使用していたメモリを解放するのでしょうか。

### 参照カウントとは
ARC を日本語にすると**自動参照カウント**です。そのまんまですね。

この**参照カウント**が Swift のメモリ管理の仕組み、すなわち ARC の仕組みの解明の手がかりに

元記事を表示

Embedded Frameworkを導入した際にipa生成が失敗した話

## 結論
* Embedded Frameworkの`Build Phases`から`Embed Frameworks`を削除する

## 経緯
* iOS Project内で依存関係を強制するために、Embedded Frameworkを以下のように作成し、AppはDomainとDataを参照でき、DomainはDataのみ参照できるように構成
* App (本体)
* Domain (Embedded Framework)
* Data (Embedded Framework)

* scheme周りも諸事情で弄っていたので、いつもfastlaneでbuildしているところ、まずは手動で`.ipa`ファイルを作成できるか確認しようとした

## 結果
**IPA proccessing failed**
スクリーンショット 2020-05-11 18.27.22.pngGenericなUITableViewCellを使う

TwitterのTLで少し前に**「UITableViewCellのサブクラスを毎回作るのではなく、GenericsなTableViewCellにUIViewを載せて対応する」**という方針を採用されておられる方がいて、良いなぁと思ったので作ってみました。

# やったこと
GenericなUITableViewCellをつくる/つかう

https://github.com/yosshi4486/GenericCell/blob/master/Sources/GenericCell/GenericTableViewCell.swift

“`swift:GenericCell.swift
public class GenericTableViewCell: UITableViewCell {

public let customView: View = .init(frame: .zero)

override init(style: UITableViewCell.CellStyle, reuseIdentifier:

元記事を表示

「Flutterのいじり方①」 ~私文男子の格闘第4話~

#はじめに
(2020/5/11投稿)
最近オンライン授業に慣れ、もう学校行きたくないとなっています。どうも私文男子です。

前々回の記事でFlutter環境を整えてみたものの、どこをいじれば良いのかさっぱりわからなかったので、どこのコードをどうやって変えれば良いのか分かった部分をレポートしたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629658/e4b541d1-7d3c-f1e0-544e-dbee94ba5ed5.png)

#テキストエディタのインストール
まずはテキストエディタを整備します。
テキストエディタってなんやと思って調べたところ、どうやらプログラマーがよく画面に出しているブラックバックのかっこいいやつはテキストエディタらしいということがわかりました。

そして、それはどうやらダウンロードしたやつの方が良いらしいということもわかりました。
私は昔、HTMLファイルの受け渡しとかをやっていてAtomというものがパソコンにまだ残っていたのですが、バージ

元記事を表示

MagicalRecordで簡易マイグレーションが失敗する

MagicalRecordがメンテされなくなって、使ってる人も少なくなってきてるから不要かもだけどメモとして。

## 環境
Xcode 11.3
iOS13
Cartage
MagicalRecord 2.4.0

## 事象
xcdatamodelに新しいバージョン追加して、項目追加し、実行したら、AppDelageteの以下部分でエラーが発生してマイグレーションされていない。

“`swift:AppDelegate.swift
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: “MyModel.sqlite”)
“`

## 原因
MagicalRecordの不具合

## 解決策
[実際はすでに不具合修正されてマージ(masterへ)されている](https://github.com/magicalpanda/MagicalRecord/pull/1378)が、リリースされそうにもない。
なので、Carthageでブランチ指定(master)に変える

“`sh:Carthage
gi

元記事を表示

【 iOSエンジニア 】 新卒未経験で入社して感じたこと

新卒未経験でiOSエンジニアになりました。
まだ研修段階ですが勉強していく中で色々と感じたことがありますので、メモ書き程度にここにまとめておこうかなと思います。

## 実務でのプログラミングとは
現在私は職場の同じチームの先輩上司1名にメンターさんとして色々と教わっています。

新卒研修として簡単なアプリを作成し都度メンターさんに添削を受けているのですが、添削を受ける中でこれまでの私のプログラミングに対する意識が60度くらい変わりました。

### コードが動く動かないの話ではない
もちろん書いたコードが動く動かないは大切なのですが、添削の内容はそのような**次元**にはありません。

– ここは if 文でも書けるけど guard 文で可読性をあげて。
– このメソッド名だとどんな動作をするのか分かりづらい。
– メソッド名は詳しく書けば良いというものではない。各クラスとの疎結合を意識して。
– コメントの書き方を学習してみて。

などなど、コードが動く動かないの1つ上の次元で添削をして頂いています。

断っておきますが、メンターさんの教え方がどうだとか、教えてる内容がどうだという

元記事を表示

【 Swift 基礎 】 delegate と protocol

**delegateとprotocol**について学んだことをまとめます。

数日間頭を悩ませたdelegateの解釈が、**ある1つの気づき**ですんなりと頭に入りました。

## UIViewControllerとその他(UI~)は紐付けされていない
はい、見出しの通りなのですが私はこの当たり前な事実に気が付かず、delegateの解釈に数日を費やしました。

今回はUIViewControllerとUITextFieldを例にあげて説明していきます。

![20:05:01_delegateとprotocolについて.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622701/21e5372d-2b2b-aede-4a3f-80991d641e32.jpeg)

これからdelegateとprotocolを理解するために重要な事柄を明記していきます。

よくdelegateとprotocolの説明に、

– 処理を任せる側
– 処理を任される側
– プロトコルはその仕様書

と書かれてい

元記事を表示

ActionSheet で width == – 16 の Auto Layout 警告が出た時の対処法

単純なレイアウトで `UIAlertController` の `actionSheet` を使ったときになぜか Auto Layout がうまく言ってないようだったのでメモ。

# 現象

ここでは例としてボタンをタップしたらアクションシートを表示するだけのコードを用意しました。

“`swift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func showActionSheet(_ sender: Any) {
let alert = UIAlertController(title: “title”, message: “message”, preferredStyle: .actionSheet)
let defaultAction = UIAlertAction(title: “item”, style: .default, handler:

元記事を表示

UnityでC++連携をする(2020年度版)

# 概要
サーバー連携をする際に送る認証用データを作ったりしたくて、そういった箇所はリコンパイルが(比較的)難しいC++側で作り込みたいなと思ったのでそのやり方をまとめます。
まずはC++の簡単なファイルを作ってのUnity連携までを記載します。

なお、連携部分は以下を大いに参考にさせていただきました。

Unity iOS/Android共用プラグイン C++ライブラリ作成
https://qiita.com/satotin/items/05fad323de3101f775d5

## 動作環境
* Mac OSX (10.15.4)
* Xcode 11.4.1
* Android Studio 3.5
* Android NDK r17b
* Crypto++ 8.2.0
* Unity 2019.3.13f1

# Unityプロジェクトの作成
とりあえず、サクっとUnityプロジェクトを作成します。こちらは割愛。

## Assetsフォルダ直下に必要なフォルダを作成

以下になるように、Assetsフォルダ内にフォルダを作成していきます。

“`
■ Assets

元記事を表示

【Mac不要】FlutterアプリにFirebase SDKを組み込んでiOSとAndroidに実機配備する手順 – Codemagic編

# はじめに

※この記事は、以下の記事の続編の一つです。

[【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 – Codemagic編](https://qiita.com/kami_teru/items/c7ed113d0ecdf7e48ff0)

この記事ではその後、FlutterにFirebase SDKを組み込み、iOS, Androidの両端末からFirebaseコンソールに疎通できるまでの手順を説明します。

Firebase SDKの組み込みを終わらせておくと、以下のようなメリットがあります。

* アプリがいつ、どこで、実行されているかの情報がFirebaseコンソールで確認できる。
* Firebase API([FlutterFire](https://firebaseopensource.com/projects/firebaseextended/flutterfire/))との連携コードの組み込みがスムーズに行える。
* 利用者のGoogleアカウントを利用するための実装(例:[Build a Photo Sharin

元記事を表示

iOS 13以降 iPadのUserAgentに注意 (WKWebView)

Xcode 11 でビルドしたWebViewのUserAgentのデバイスごとの比較です。
注目したいのは iOS 13.0 iPad 9.7 インチ以上のUserAgentで、iPadではなくMacintoshとなっています。

## UserAgent

iOS 13.0 iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 13.0 iPad mini 5
Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

__iOS 13.0 iPad 9.7 インチ以上__
__Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)__

元記事を表示

iPhoneのテザリングの仕様について

#DHCP機能による自動設定
iOS端末のインターネット共有機能を使い接続すると、DHCPにより以下の設定でIPアドレスが降ってきます。

* IPアドレス 172.20.10.*
* サブネットマスク 255.255.255.240
* デフォルトゲートウェイ 172.20.10.1

ここで注目なのはサブネットマスク
/28でサブネットが設定されているためIPアドレス範囲が16個しかありません。
そのため、実質の接続台数は13台が限界となります。
実際の使用ではそれほど同時接続することもなく問題になることはあまりないでしょう。
しかし、実は別の問題が存在します。

#リースタイム
iOSのDHCPのIPリースタイムは、85536秒(約24時間)に設定されています。
そのため、一日に13台以上接続すると、それ以上は最初のIPが解放されるまで接続することができなくなります。
現状では、強制的に解放する方法はありません。また、端末の再起動等では解放されません。

#解決方法
現状根本的な解決方法はありませんが、接続端末側でIPを手動設定してやれば問題なく接続できます。

元記事を表示

【Mac不要】開発中のFlutter製アプリを仲間のiOS端末に実機配備する手順 – Codemagic&TestFlight編

# はじめに

※この記事は、以下の記事の続編の一つです。

[【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 – Codemagic編](https://qiita.com/kami_teru/items/c7ed113d0ecdf7e48ff0)

Macなし、Windows機のみという環境でも、Flutterはクロスプラットフォーム対応ですので、作成したアプリはiOSにもリリースすることができることは上記の記事で紹介しました。

ただ、上記の記事では「開発者自身が所有するiOS端末に」という前提があります。しかし、開発は複数人のチームで行うことも多いと思います。

そこでこの記事では、上記の記事の手順を少し変更して、仲間(=開発チームメンバー)のiOS端末にリリースする手順を紹介します。

## 前提

この記事は、以下に当てはまる人向けの iOS 対応アプリを開発する手順を紹介します。

* 開発機はWindowsだ
* **Macを持っていない**
* Flutterで開発したい
* Apple Developer Programに既に

元記事を表示

SwiftUIとCocoaビューのデータ連携

SwiftUI と既存の Cocoa ビューに対して共通のデータソースを使い、一方を更新すると他方も更新されるような構成を取る場合、データの受け渡しにトラップがあるため少し注意する必要があります。(以下、Xcode 11準拠)

## 目標

サンプルとして次のような画面のアプリを考えます。
app.png

上半分は SwiftUI で TextField を使ったビュー、下半分は VC 上に UITextField を配置したこれまでのビューです。全体としては SwiftUI にラップされ、アダプターを介して Cocoa のビューを SwiftUI の View として取り込む構造になっています。そして2つのテキストフィールドは一つのデータソースを共有しており、どちらか一方に値を入力するともう一つのフィールドに

元記事を表示

[Swift]Realm Swift #3 トラブル対応

iOS でRealm Swift を 利用し、サンプルを作成する際のトラブル内容と対応事項をメモします。

#目次
[・ Realm Swift#1 class ](https://qiita.com/mario7/items/2df2c3e172f15f1d07cb)
[・ Realm Swift#2 sample](https://qiita.com/mario7/items/a0a6a4e4c09ce1e0986b)
・ Realm Swift#3 issue

# 動作環境
Swift 5.0
Xcode 11.1

# トラブル一覧
1。レルムにデータ追加失敗の時
2。複数カラムのプライマリーキーが作成したい場合
3。 レルム取得する際にアプリクラッシュされる場合

#レルムにデータ追加失敗の時

“`StudentAccessor.swift
class Student: Object {
@objc dynamic var studentId = “”
@objc dynamic var name = “”
@objc dynamic var a

元記事を表示

Flutter入門サイトを作ってみた件【Flutterで始めるアプリ開発】

みなさん、こんにちは
とあるサラダ?の会社で開発やってます umatoma です。

Flutter入門用のWebサイトを1つ作ってみたので、
それに関しての記事を投稿してみようかなーと思っています。

# 目次
– Flutterで始めるアプリ開発
– なぜ作ったのか
– 今後の予定
– 最後に

# Flutterで始めるアプリ開発

### Flutter入門サイト

作ってみたFlutter入門用のWebサイトがこちら?です。

**Flutterで始めるアプリ開発**
*Flutterを使ったiOS/Android/Webアプリ開発への入門に必要な情報を分かりやすく紹介*
https://www.flutter-study.dev/
![banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632977/a3a10e00-baf5-9a1a-2250-134f5f7e7f8d.png)

### 想定しているターゲット層

– アプリを作ってみたいけど、どうやって作るか分からない方

元記事を表示

Swiftで反射神経を鍛えるゲームを作ってみた

#はじめに
はじめまして。初投稿です。
趣味でプログラミングしてて、友人にどうせだったらQiitaとかGithubに公開すればいいのにと言われ、確かにその通りだと思ったのでこれから随時投稿していこうと思います。
よろしくお願いします。

#概要
Swiftで反射神経を鍛えるゲームを作りました。Swiftで初めてちゃんと最後まで作ったアプリなので、結構思い入れがあります。1から10まで小さい数から順番にタップしていくシンプルなゲームです。
プレイ画面はこんな感じ。↓
![game2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623917/62d6e73a-d716-6f52-67f6-cd9a33702a3e.gif)

#開発環境
・ iOS 13.3.1
・ Xcode 11.3.1

#ソースコード
簡単にソースコードの説明をします。
全部載せるととても長くなってしまうので、スコアシーンなどは割愛します。
全てのコードは[Github](https://github.com/YumaSato-u

元記事を表示

Swift3入門

#はじめに
某プログラミング学習サイトの学習記録を記します。

#共通操作
・Shiftを押しながらクリックで範囲選択になる

#No1
・Xcodeでplaygraoundを新規作成する
・種類はBlankを選ぶ (他にはGame, Map, Single Viewがある)

#No2
・下記について、C言語と同じ
 ・コメント
 ・print関数
 ・文字列を””で囲むこと
 ・文末が;であること
・実行形式の選択は、□または△を長押しすることで変更できる
 短く押すと実行される。
・右ペインに実行結果が表示される

#No3:変数と定数
・変数:var
・定数:let

・例
 let msg:String; // 文字列型の定数msgを宣言
 msg = “hello”; // msgに”hello”を代入

 let msg = “hello”; // 型推論が行われmsgは文字列型となる

#No4:データ型
・下記はC言語と同じ
 ・Int:整数型
 ・Float, Double
 ・キャスト(型変換)
・Bool型:true / false

元記事を表示

【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 – Codemagic編

# はじめに

Flutterはクロスプラットフォーム対応ですので、作成したアプリはiOS, Android両方にリリースすることができます。ところが、WindowsではiOS向けのビルドができません。Macを持っていない人にはつらい事実ですね。そこで、この記事ではCodemagicというサービスを利用してiOS, Android両方にリリースする手順を紹介します。

## 前提

この記事は、以下に当てはまる人向けの iOS/Android 対応アプリを開発する手順を紹介します。

* 開発機はWindowsだ
* **Macを持っていない**
* Flutterで開発したい
* Apple Developer Programに既に登録している、または年間で約12,000円を支払えるクレジットカードまたはデビットカードを持っていて、支払い後に最大48時間待ってやるのも悪くない。※1

※1: 2020/03/25現在。

## 開発環境の前提

* AndroidStudioがインストールされていること(まだの方は、インストールをお願いします)
* Git for windowsが

元記事を表示

【iOS】画面をタップしたらキーボードを閉じる処理を共通化してみる

## はじめに

UIView の `endEditing(_:)` は特定のテキストフィールドによらずにキーボードを閉じる方法として有効です。

次のような実装で、画面のタップでキーボードを閉じることができます。

“`swift
import UIKit

final class ViewController: UIViewController {

@IBOutlet private weak var textField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(UITapGestureRecognizer(
target: self,
action: #selector(endEditing(sender:))))
}

@objc func endEditing(sender: Any) {
view.endE

元記事を表示

OTHERカテゴリの最新記事