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

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

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の初心者解説

タイトルの通りiOSエンジニア歴1ヶ月未満の私が、**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。暗号化エラーが起きる時
~~4。レルム取得ができない時~~

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

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

元記事を表示

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関数
 ・文字列を””で囲むこと
 ・文末が;であること
・実行形式の選択は、□または△を長押しすることで変更できる
 短く押すと実行される。
・右ペインに実行結果が表示される

元記事を表示

【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

元記事を表示

NSPersistentCloudKitContainerを導入し、既存のデータをiCloudにアップロードする際のコツ

# NSPersistentCloudKitContainerとは?
[NSPersistentCloudKitContainer](https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer)はCoreDataで使用する[NSPersistentContainer](https://developer.apple.com/documentation/coredata/nspersistentcontainer)をCloudKitに対応させたクラスです。
*CoreDataについては[この記事](https://qiita.com/da1ssk/items/3b1b9c11106717a5a935)がわかりやすいです。

従来、CoreDataで扱っているデータをCloudKitにアップロードするためには色々とコードを書く必要がありました。しかし、AppleがWWDC2019で発表したNSPersistentCloudKitContainerを使えば、それが簡単に実現できるようになりま

元記事を表示

【expo】ios,androidのストア公開で詰まったメモ

少し詰まったのでメモします。
基本的なビルドの仕方は、udemyの[React Native で iOS / Android アプリ開発をゼロから始めよう!](https://www.udemy.com/course/react-native-ios-android/)の通りにやればいけると思います。

# ios

## 「Guideline 2.3.8 – Performance – Accurate Metadata」 の対処法

スクリーンショット 2020-05-05 08.35.18.png

Developer Accountで設定したのと同じ名前をapp.jsonに設定する。

“`app.json
“expo”: {
“name”: “多面!フラッシュ暗算”,

“`

元記事を表示

UserDefaultsをProperty Wrapperでカッコよく使う

iOSプログラマなら誰もが3回は作っているUserDefaultsをいい感じに使う方法の解説です。

今回はProperty Wrapperを活用します。目標は以下です。

* あまりコードを書かずに使える
* UserDefaultsで元々使える型も使えない型も同じように使える
* 型安全に使える(キャストせずに済む)
* Optionalも扱う(UserDefaultsの`integer(forKey:)`は値がないときnilではなく0を返してしまう)
* Swift5.1以降対応
* iOS11以降対応

# カッコよく使う例
アプリごとに用意するUserDefaultsアクセス部分の例です。

“`swift
struct User : Codable, UserDefaultCompatible {
var name: String
}

struct Settings {
@UserDefault(“user”, default: User(name: “abc”))
var user: User

@User

元記事を表示

【Xcode】Could not attach pid to XXX というエラーが出る

### :boom: クリーンビルドする
Xcodeを開き左上のメニューから

***・「Product」 → 「Clean Build Folder」***

### :boom: シミュレーターの設定をリセットする
iPhoneシミュレーターを開き左上のメニューから

***・「Hardware」 → 「Erase All Contents And Settings」***

### :boom: 念のためXcode再起動してみる
これらを試してみると私の場合は綺麗に直りました。

元記事を表示

OTHERカテゴリの最新記事