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

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

こんなソースコードはイヤだ-関数の使用者に余計なことをさせない

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# 関数の使用者に余計なことをさせない

“`sample.swift
func printCountMessage(counts: [String]) {
print(counts.joined(separator: “,”))
}

let counts = [1, 2, 3]
printCountMessage(counts: count.map{ String($0) })
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/create_function_easy_to_use)

元記事を表示

【Pyto】スマホをPC用フリックキーボードにしてみた

![image2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549600/88220d07-4b7b-21a3-bb1e-a9808d179553.jpeg)

## はじめに

若者のPC離れと言われる中、タイピングができない人が多くなってきているそうです。しかし若者はPCが使えない代わりにスマホの扱いには慣れており、現在の女子高生のフリック入力はガラケーギャルもびっくりするほどの速さです。

それならPCの入力もフリックでやってしまえば良いのではないか、ということは以前から言われていたようですが、手軽に試せるソフトはありませんでした。

そこで、iOSでPythonプログラミングができる[Pyto](https://pyto.app/)というアプリを使って、フリックキーボードを作ってみました。

## 既存の製品
– [FlickTyper](http://flicktyper.com)
スマホとPCをこの装置で繋ぐとスマホがフリックキーボードになります。また、Bluetooth

元記事を表示

Application Development Guide for Android and iOS

The complete guide on how to create a mobile application, from defining the project goal and technology stack to testing and deployment. Check it out!

元記事を表示

How to attract more customers for your mobile app

How to promote a smartphone app, attract users, and earn an income? Check out the best mobile application marketing tools and strategies.

元記事を表示

Top 15 Apps Like Instagram for IOS and Android you need to know about

Though Instagram continues to be the leading photo-sharing app, it has strong competitors. Check out 15 Instagram-like apps to see their success formula.

元記事を表示

イテレータをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Iterator(イテレータ)

####0. イテレータの意義

複数の要素の集合について、全要素に対し順に同様の処理を行うデザインパターンをイテレータという。

Swiftではfor-inループなどで使うことが出来る。

Array型, Set型, Dictionary型などあらかじめ用意されている型はもちろんだが、カスタムタイプもSequenceプロトコルに対応させることでfor-inループで回すことができる。

今回はキューを実装した後、それをSequenceプロトコルに対応させfor-inループで回せるようにする。

####1. カスタムタイプ(キュー)の実装

キューとは、複数の要素を扱う型の一種でFirst-in Last-out(最初に追加した要素が最後に取り出される)が特徴の物を言う。

SwiftではUITableViewやUICollectionViewを使

元記事を表示

UIImageからGIFを生成する

個人開発アプリ[TweetFly](https://itunes.apple.com/app/id1515218388?mt=8)
複数枚の画像をGIFに変換する機能がありまして、ちょっと調べてまとめました。

下のGIFは`String` -> `UIImage` -> `GIF`に変換したサンプルです。
![sample_typewritter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13219/38d5469d-38e2-91b1-5a22-bd365d50d3f5.gif)

“`swift

import UIKit
import ImageIO
import MobileCoreServices

class GIFCreator {

struct GIFFrame {
var image: UIImage
var duration: Float
}

static func create(with fram

元記事を表示

Unity IAPは公式APIドキュメントがないので課金処理は自前ネイティブ実装がいいかも

# まとめ
– https://docs.unity3d.com/Manual/UnityIAP.html
– マニュアルはある。しかしAPIについての最新の説明は存在しないので自己責任でやるしかない。
– 自分でネイティブ連携するのが最強

# 現状
– https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/
– Where Has Unity Iap Scripting Reference Gone?(Unity IAPのスクリプトリファレンスどこにやった?)

-https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/#post-4543948

> Understood on the concern. As we are moving more towards Package Manager, we’ve had to adjust our doc

元記事を表示

iOSのダウングレード手順

iOSのダウングレード手順を説明します。

`iTunes`がなくなったので、`Finder`から行います。

iOS FW(ips)を以下からダウンロードします。ダウングレードできるバージョンは、`Signed IPSWs`のみ有効です。

https://ipsw.me/

次に、`Finder`を開いて、ダウングレードしたいデバイスを選択します。

次に、macの場合は、`option(alt)`を押しながら、winの場合は`shift`を押しながら`アップデートを確認`ボタンをクリックします。

![](https://raw.githubusercontent.com/mba-hack/images/master/ios_fw_ips_downgrade_01.png)

すると、ファイルを選択できるようになるので、先ほどダウンロードした`.ips`を選択して、ダウングレードできます。

元記事を表示

FirebaseCrashlyticsへのupload-symbols実行時にCould not fetch upload-symbolsのエラーが発生する

リリースしたアプリのクラッシュログ分析などでよく用いられるFirebaseCrashlytics。
FirebaseCrashlyticsを使用して、クラッシュログをもれなく収集するには、ライブラリ内のメソッドを使用するなどしてdsymファイルをFirebaseにアップロードする必要があるのですが、ここで表題の`Could not fetch upload-symbols`のエラーが発生しました。同じエラーが発生した人の助けになればと思います。

## 結論

結論から記述すると、Firebase側のコンソール設定が完了していなかったことが原因でした。
ただ、権限の関係で本番環境のコンソールが確認できなかった、なぜかFabricのライブラリ内にあるコマンドではアップロードができてしまった、などの複数の要因から原因に気づくのにも時間がかかりました。
コンソール画面の閲覧権限がないなど、同じような事象に出くわす方もいるかと考え、今回の記事作成に至りました。

## どんなことをしたか

### FirebaseCrashlyticsについて

まずFirebaseCrashlyticsにつ

元記事を表示

PlayFabでのプッシュ通知設定が難しすぎた

UnityのバックエンドをPlayFabに任せてみようと試みていたのですが、iOSのプッシュ通知設定が難しすぎたので備忘録です。

# pemファイルのアップロードができない
PlayFabのプッシュ通知設定手順については、公式や紹介ブログがあるので詳細は割愛しますが、pemファイルをアップロードする段階で以下のようなエラーが発生してしまいます。

> Invalid parameter: Reason: cannot be empty

スクリーンショット 2020-06-04 1.54.16.png

pemの発行には問題無さそうで、まるでエラーの検討がつきません。

# 解決策
ぐぐってみると以下のフォーラムを発見。
https://community.playfab.com/questions/36895/

元記事を表示

【Swift】KVOでUserDefaultsの値の変更を監視する

## KVOとは
KVO(Key Value Observing)の略名になります。
その名の通り、オブジェクトの値を監視する為に用いる技術です。
値の更新や削除などの変更を検知することができとても便利です!

## UserDefaultsの値の変更を監視する
`UserDefaults`の値を`dynamic`で取得する

“`swift
// 今回はIntの値を扱っています
extension UserDefaults {
@objc dynamic var translateLimit: Int {
return integer(forKey: keyName)
}
}
“`

監視する処理

“`swift
var observer: NSKeyValueObservation?

private func setKVO() {
observer = UserDefaults.standard.observe(\.translateLimit, options: [.initial, .new], changeHandler: {

元記事を表示

UnityでSwiftの自作「Static Library」を使う

# 環境
– Unity 2018.4.23f1
– Xcode 11.5
– Swift 5
– iOS 13.4.1(iPhone 11)

# 手順の概要

**「Unity」**から直接**「Swift」**のコードを呼び出すことはできないようです。。。orz
その為、下記のような形で、**「Objective-C++」**を経由する事で、**「Swift」**の関数を呼び出します。

# 設定手順
## 「Swift」の「Static Library」を作成
### 「Xcode」で、プロジェクトを作成

– 「iOS」→「Framework & Library」→「Static Library」を選択して、「Next」を押下
Embedded Frameworkでビルドエラーが出る場合

#クリーンしてからの再ビルドでエラーが出る人

Embedded Frameworkを複数作成して開発していると、差分ビルドは成功するのにクリーン後のビルドで何故かFrameworkが無いとか、謎のビルドエラーなどが出る人向けです。

##依存関係を定義しましょう。

ターゲット -> Build PhasesからDependenciesを展開。
依存関係にあるEmbedded Frameworkを追加しておきます。

これだけで解消します。

元記事を表示

肥大化したiOSアプリを課題解決のために半年弱でリアーキテクチャした話

## はじめに

2019年に約半年弱の開発期間で公開中のiOSアプリを
リアーキテクチャーした話を備忘録としてまとめました。

サービスインされているアプリを一気に作り直すケースは
ビジネス判断的にはかなり危い橋を渡っているのであまり無いとは思いますが
似たような状況で開発に臨んでいる方など、どなたかの参考になれば幸いです?

## 開発の背景

* 2014年から毎年追加改修が走っているストア公開中のECアプリ案件(Objective-C)
* 画面数で見れば中規模から大規模にカテゴライズ
* iOSのバージョンについて古いものは毎年切り捨ててく方針
* 開発メンバーは毎年ほぼ総入替
* 自分は2018年頃から参加しました

## 抱えていた課題・技術的負債

受託案件あるあるですが以下の課題を抱えていました。

0️⃣ ピュアObjective-C
1️⃣ 可読性の低い巨大すぎるMVC
(MassiveViewController + 非同期処理通知はNSNotificationのみ, BlocksKit等の利用無し)
2️⃣ 同じ/似たような機能を再利用せずにコピペで複数

元記事を表示

XCTestの非同期テストで「呼び出されないこと」を検証する

# 非同期テスト

下記のようなサブスレッドを利用して結果を非同期に返すクラスがあるとします。

“`swift
class AsyncTask {
func execute(completion: @escaping (Bool) -> Void) {
DispatchQueue.global().async {
completion(false)
}
}
}
“`

このクラスのテストをXCTestで書く際、以下のような実装をしてしまうと、該当のテストケースは非同期処理の完了を待たずにテストを終了させてしまいます。

“`swift
class SampleTests: XCTestCase {

var asyncTask: AsyncTask!

override func setUpWithError() throws {
asyncTask = AsyncTask()
}

func test() throws {

元記事を表示

App Store Connect Q & (A)

App Store Connect に関する気になることを記載する
何か分かれば、Answerとして追記する

# アップロード関係

## アップロードしたけどTestFlightに表示されない

Q.
アクティビティにはビルドとして表示されるが、TestFlightには表示されない
他のビルドバージョンは全て表示されているのにそのバージョンだけ抜けている

## アップロードしたアプリはダウンロードできるのか

A.
多分できない

# App Analysis

## アップデート数を確認したいのだが

A.
App Store Connectのウェブサイトでは項目としてなかったが、iOSアプリの方からは確認できた

## アップデート数の定義は?

Q.
調べても書いていない

## アップデート日じゃなくて公開日はどこに書いてある?

A.
多分、アクティビティ→App Storeバージョン→配信準備完了の日付
尚、公開予約した場合は「デベロッパによるリリース待ち」となっているはず

## 機種ごとに各種データの集計をしたい

A.
機種を選ぶ項目がなかったため、機種ごとには

元記事を表示

XcodeGenを用いて中規模プロジェクトをリリースした話

## はじめに
久しぶりの投稿。
題名の通り、期間は半年、エンジニアは二人という開発体制のプロジェクトに[XcodeGen](https://github.com/yonaskolb/XcodeGen)を導入し、先日プロジェクトをリリースしましたので、その知見を共有します。

## [XcodeGen](https://github.com/yonaskolb/XcodeGen)とは?
iOSアプリをチーム開発のついて回る問題、**`project.pbxproj`ファイルがコンフリクトしまくる問題**があります。その問題解決できるツールが**XcodeGen**です。
最近取り入れてるプロジェクトは増えてきてるとはいえ、まだまだ発展途上のツールでガンガンアプデされており、機能がもりもりです。
XcodeGenは主に以下をやってくれます。(*1)

### XcodeGenがやってくれること
– コマンド一発で`.xcodeproj`を`project.yml`の設定を元に生成。
– ライブラリ依存、フレームワークも管理
– Build Configurationも管理

元記事を表示

マルチモジュールでIBでNamedColorを使用する方法

[こちら](https://devblog.xero.com/managing-ui-colours-with-ios-11-asset-catalogs-16500ba48205) を元に対応した内容ですが、あまり日本語で書いているところが少ないと思い書くことにしました。

XcodeのAssetでnamed colorを設定してIBで下記のように色を指定できて便利です。

![alt](https://miro.medium.com/max/1104/1*O_zUaua3r0hjbyXvGLeP0A.png)

※ [↑こちら](https://devblog.xero.com/managing-ui-colours-with-ios-11-asset-catalogs-16500ba48205) の画像を参照しています

しかし、マルチモジュールの場合、IBで設定した後に以下のような警告が表示されて、Assetで定義をしていた色を変更しても色の変更が反映されないことがあります。

“`
2018-04-26 17:30:30.009855+1200 MyApp[82987:11

元記事を表示

iOSのURLスキームの脆弱性について

# 概要

iOSのURLスキームが意外と脆弱だから気をつけた方が良いよと言う話をします。

※違うよ、とかあれば気軽にコメント頂ければ幸いです

# iOSのURLスキームについて

下記のようにURLスキームを叩くことがあると思うのですが、

“`
hoge://〜
“`

これってどの情報を元にどのアプリがこのURLスキームを受けるか決めているのでしょうか。

答えとしては、どのアプリが受け取ると言う情報が入っている訳ではありません。

なので

AアプリとBアプリでそれぞれ同じプロトコル名で受け取るようにしていた場合、どちらがそのURLスキームを受け取るかわかりません
(過去に確認した挙動だと、先にインストールされている方のアプリが受け取るようです)

Aアプリ

“`
hoge://〜
を受け取るように実装
“`

Bアプリ

“`
hoge://〜
を受け取るように実装
“`

奪い取りたいURLスキームのプロトコルなんて他の人わからないじゃんって思うかもしれませんが、
[こちら](https://resources.infosecinstitute.com/i

元記事を表示

OTHERカテゴリの最新記事