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

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

iOSアプリから自己署名証明書を使っているHTTPSサーバーと通信する

[:contents]

# はじめに

ローカルホストで立ち上げたサーバーに対してHTTPSリクエストを行う際、自己署名証明書(オレオレ証明書)を使っているために処理が正常終了しないことがあった。

検証環境:Xcode11.4.1, iOS13.4.1

“`
ATS failed system trust
Connection 3: system TLS Trust evaluation failed(-9802)
Connection 3: TLS Trust encountered error 3:-9802
Connection 3: encountered error(3:-9802)
Task <907D1DCF-61F0-436A-ADFB-8F733B2262F9>.<1> HTTP load failed, 0/0 bytes (error code: -1200 [3:-9802])
Task <907D1DCF-61F0-436A-ADFB-8F733B2262F9>.<1> finished with error [-1200] Error Domain=

元記事を表示

【iOS】画面の下からせり上がってくるタッチパネルの作り方

[![Simulator Screen Shot 2020.05.13 0.47.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/9214125d-f0ff-dc36-c2ea-955f5ad12dae.png)](https://twitter.com/sunstripe2011/status/1260140455733243904)

上記のようなパネルに表題を作っていこうと思います。

まずは、こんな目的(オブジェクト)を設定していきます。

### バージョン 1.0.0

今回の課題は、「LINE などにせり上がってくるタッチパネルの表示」
(1)画面起動時に迫り上がる
(2)タッチパネルにより処理が行われる
(3)タッチパネルを長押しするとタッチパネルが非表示
(4)タッチパネルがない状態で、下から上にスワイプをすると表示する

以下のように 値を入れることでパネルが作成できるようにしていくことにします。

# panelInfo

|key|型名|説明|–|–|–|

元記事を表示

[備忘録] SwiftでNavigationBarの背景にグラデーションを設定する

## はじめに

初のQiita投稿になります。

Swiftを勉強し始めて、3ヶ月強とまだ日は浅いですが、
悪戦苦闘した部分等について忘備録的な意味も含め今後記事を書いていければと思います!

コードの書き方等、何かと至らない点があるかと思いますが、
お気づきのところあれば是非アドバイスくださると助かります!!

## 完成形

![backgroundSwift.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532395/4a8d8243-b82b-caac-10a9-52c457a9ccc7.gif)

GIFだとなんか色汚い感がありますね、悲しい。。

## 対象者

・ iOSアプリ開発初心者の方
・ Navigation Bar をカスタムしたいなと思っている方
・ Apple Music の歌詞表示画面のbackgroundみたいな色出してえと思ってる方()
・ CSSでlinear-gradient()を多用していた方

## 開発環境

・ Xcode Version 11.3 (1

元記事を表示

AndroidとiOSでテキストフィールドの入力文字を制限する

# やること
– Android/iOSそれぞれで、テキストフィールドに半角文字のみ入力できるように実装する。

# Android

“`RegexInputFilter.kt
open class RegexInputFilter(private val pattern: String) : InputFilter {
override fun filter(
source: CharSequence,
start: Int,
end: Int,
dest: Spanned,
dstart: Int,
dend: Int
): CharSequence {
return if (source.toString().matches(Regex(pattern))) {
source
} else {
“”
}
}
}

class AlphanumericInputF

元記事を表示

iOS Safariでインラインフレームを使った場合に、レンダリング位置がズレる問題

スマホ用のWebサイトで、iframeを使っていたのですが、たまにiframeの中身のレンダリング位置がズレる問題に遭遇して原因の解明と対策に時間がかかったので共有します。

## そもそもはiframeの高さを中身の高さと合わせたかった
なので、jQueryで、

“`javascript
$(“iframe”).load(function(){
$(this).height(0);//一旦iframeの高さを0に
$(this).height(this.contentWindow.document.documentElement.scrollHeight);//中身の高さに揃える
$(this).scrollTop();//念のためiframeの中身の一番上にスクロール
});

“`
としていたのですが、何故かたまに中身のレンダリング位置がズレる。具体的には中身のコンテンツの上の方がiframeからはみだして見れなくなる。

## 原因はiframeロード時の親フレームのスクロール
色々いじくりまわした結果、iframeの中身のロード、高さを揃える処理の最中

元記事を表示

Xcodeのコンソール出力が使えないときのデバッグ法

# 対象
– macOSやiOSでのネイティブアプリ開発
– SwiftやObjective-Cでの開発
– React Nativeなどクロスプラットフォーム環境でも対応している場合があります
– Xcodeのデバッグコンソールが使えない

### Xcodeのデバッグコンソールが使えない状況とは
– Push通知等によるバックグランドからの起動時の挙動を見たい(iOS)
– IME,webcamプラグイン,その他プラグインでXcodeからの起動ではなく指定場所に配置してシステムによって起動されたときの挙動をしらべたい(mac)

このように,Xcodeからの起動では上手く動作するが,実際に使ってみると上手く動かない,その理由を調べたいというシーンがあります.こういう場合に紹介する方法を使うと簡単に値の出力ができます.

#使用方法

macOS,iOSのライブラリのFoundationに含まれるNSLogを使用します.

“`:Swift
NSLog(“Debug Message”)
“`

“`:Objective-C
[NSLog @”DebugMessage”];

元記事を表示

【 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つのテキストフィールドは一つのデータソースを共有しており、どちらか一方に値を入力するともう一つのフィールドに

元記事を表示

OTHERカテゴリの最新記事