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

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

[Metal]metalファイルをプリコンパイルしつつ実機でもコンパイルする

ランタイムでシェーダをコンパイルするときに、毎回実機でコンパイルエラーを確認するのは辛いですね。
なので、シェーダのプリコンパイルを挟んだ上で実機でコンパイルすることで実行前にシェーダの記述エラーに気がつくことができます。

具体的にはmetalファイルをプリコンパイルした上で、defaultLibraryを使わずにmetalファイルからソースコードを読み込んで実機でコンパイルすれば良いわけです。
しかし、XcodeはMetalファイルを検知すると問答無用でプリコンパイルしてしまう [^1] ためmetalファイルをそのままアプリにバンドルするにはひと工夫必要です。

まず次のようにフォルダにファイルを配置します。

スクリーンショット 2020-03-13 2.57.45.png

この状態で、フォルダをXcode

元記事を表示

[Metal]MTLLibraryをランタイムでコンパイルする

MTLLibraryは、SCNSceneKitなどでmetalシェーダのストアとして機能するコンポーネントです。
https://qiita.com/noppefoxwolf/items/ae302839f01ec4d820a1

基本的にはプロジェクトにmetalファイルを入れればアプリコンパイル時にコンパイルされてdefaultLibraryとしてバンドルされますが、時にはランタイムでコンパイルしたい場合もあります。
一つ例にあげるとすれば、実行時までマクロの値が決まらない時などが挙げられます。

“`metal:source.metal.txt
#ifdef OUTLINE_WIDTH
return float4(0,0,1,1);
#else
return float4(1,0,0,1);
#endif
“`

MTLLibraryを作るには、MTLDeviceのmakeLibraryメソッドを使います。

“`swift

library = try device.makeLibrary(source: source, options: options)
“`

so

元記事を表示

【 storage vs memory 】イーサリアム上でのガス消費量の比較

## はじめに

**Solidity** を勉強していると、「 **storage** はコストがかかるから 極力 **memory** を使うべき 」という話をよく聞きます。ほかにも、構造体の内容を変更する際など、対象のデータを **memory** 変数に取り出して編集し、最後に実体となるデータに上書きするようなコードもよく見かけます。

“`:例えばこんな感じ:お行儀のよいコード
// 更新したいデータをメモリ変数に取り出す
SomeData memory temp = datas[_target];

// 内容の変更
temp.gold = _gold;
temp.coin = _coin;
temp.exp = _exp;
temp.friend = _friend;

// 実データへ反映
datas[_target] = temp;
“`

なるほど、**gold**, **coin**, **exp**, **friend** の値をメモリ上で処理することで、ストレージ領域への書き込みを最後の1回で済ませています。見た目にもわかりやすい書き方ですし、これでコスト

元記事を表示

特定のバージョンのcocoapodsをインストールする

開発中のプロジェクトに途中からジョインした場合など、Podfile.lockに記載されているcocoapodsのバージョンと最新のcocoapodsのバージョンが違ってビルドするたびにdiffが出て困る場合がある。
そういうときはそのバージョンのcocoapodsをインストールするのが問題も起きにくいし便利。

**バージョン1.9.0** のcocoapodsをインストールしたい時は、こんな感じのコマンドを打つと良い。

“`
sudo gem install cocoapods -v 1.9.0
“`

元記事を表示

iOS アプリのB2B配布

Apple Store Connect がB2B向けの配布手段
・プライベートかつセキュアに配信できます。
・配信先は、特定のパートナー企業やユーザー、フランチャイズ先、従業員などを指定できます。

Apple Store Connectを使用するのに以下が必要。
– Apple Developer Programnの申請
– 有料アプリやアプリ内課金を行う場合、税金&口座情報の入力。

参考
https://developer.apple.com/business/custom-apps/
https://help.apple.com/app-store-connect/#/dev300c2c5bf

元記事を表示

FlutterでNFC通信を利用して学生証のプリペイド使用履歴を表示させてみた

# はじめに
 前回[こちら](https://qiita.com/f-nakahara/items/82fefe574a2e5a25182b)の記事でFlutterのnfc_managerを使用して学生証のプリペイド残高を読み込んでみました。
 今回は、残高だけでなく、使用履歴も表示させていこうかと思います。ちなみに、デザインは全く意識せず、必要なデータだけ表示させてるので見た目に関してはシーッ!!!

# 完成形
![gakuseisho.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600842/edb83bbe-f093-e844-6671-46dadbc2578f.gif)

# やってみる
## 使用ライブラリ
 NFC通信を行うために使用するライブラリは「[nfc_manager](https://pub.dev/packages/nfc_manager)」というものを使っていきます。NFC通信をするためのライブラリは他にもいくつかありましたが、個人的にこちらのライブラリが一番使いやすか

元記事を表示

営業マンが独学でiOSアプリをリリースし、レビュー4.5をもらうまで

営業しながら独学で作ったiOSアプリの話をエンジニアの方にしたところ反響がありましたので、書いてみました。

###何を作った?

タイ語学習iOSアプリ Thai Reading
タイ語の読み方を16のレッスンで習得できるiOSアプリです。
[アップルストアリンク](https://apps.apple.com/jp/app/thai-reading-alphabet-tone/id1445544247?l=en)
Simulator Screen Shot - iPhone 8 - 2020-03-01 at 14.33.00.png Simulator Screen Shot - iPhone 8 - 2020-03-01 at 11.10.04.png

元記事を表示

SwiftUIアプリケーション開発の不足を補うSwiftUIX

# 想定読者
SwiftUIでアプリケーション開発をしようと思っている、もしくは現状が事実的なベータ状態でUIKitやAppKitを使った方がまだ早いと現実的な判断をしているiOS開発者の方

# はじめに
WWDC19でUIKitを利用しないViewフレームワークのSwiftUIが紹介されkeynoteはとても盛り上がりましたが、ベータ版や続くXcodeのリリースを触るにつれて「これはまだ実用に耐えないだろう」と感じ、SwiftUIが成熟するまで技術選定を先延ばしにした技術者の方は多いと感じています。自分も基本的には同じ意見で、大規模なプロダクションコードにおいては導入するつもりはないです。ですが、個人開発においては自分でリスクと時間がコントロールできるため、**問題を承知の上でリスクを取ってSwiftUIを利用したアプリケーション開発を試しています。**動機は単純な興味です。

この記事では、そのような状況の中でSwiftUIにおいて現状の基本コンポーネント不足を解決しようとしている**[SwiftUIX(Extension)](https://github.com/SwiftUI

元記事を表示

Solidity 構造体のパディングを意識して ストレージを効率化

## はじめに

いきなりですが、 [**CryptoKitties**](https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code) の **Kitty** 構造体を見てみましょう。

“`solidity
// The main Kitty struct. Every cat in CryptoKitties is represented by a copy of this structure,
// so great care was taken to ensure that it fits neatly into exactly two 256-bit words.
// Note that the order of the members in this structure is important because of the byte-packing
// rules used by Ethereum.
// Ref: http://solidity.readthedocs.

元記事を表示

FlutterでNFC機能を使用して学生証のプリペイド残高を取得してみた

# はじめに
 この記事では、Flutterで学生証のプリペイド残高を読み込んだときの手順を書いていくぜ!
 FlutterでNFC通信をして実際に欲しいデータを取得するような記事がまじで見つからない。あっても大体はID取得して終了みたいな感じだったので、Javaで実装している[こちらのサイト](https://qiita.com/na234/items/59558a3bfc8d74c94522)を~~パクっ~~参考にしてバッコリ書いていくぜ!

#

# やってみる
 とりあえず、みんなが早くやれとせかしてくるから、書いていきます。だから落ち着いてくれ!
## 使用するライブラリ
 FlutterにもNFC通信をするためのライブラリはたくさんありますが、今回は「[nfc_mangaer](https://pub.dev/packages/nfc_manager)」を使用していきます。
 ライブラリ読み込み後は忘れないうちに以下のパーミッションも設定しておきましょう

“`AndroidManifest.xml
Flutter の Integration Test のご紹介

## 前提

・Flutter の導入は完了済み
・Integration Test やったことない

## やること

公式でサンプルがあるのでそれをみて進めていきます!

https://flutter.dev/docs/cookbook/testing/integration/introduction

>
1. テストのためのアプリ作成
2. dependency に flutter_driver を追加
3. テストファイルを作成
4. テストのための app ファイルを記述
5. テストを記述
6. テストを実行

## 1. テストのためのアプリ作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165251/9cbd85b3-ef56-5289-f70c-fe4098987889.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165251/c173e8f8-4

元記事を表示

Unityで作ったアプリをApp Storeへ公開するまで

私が通う就労移行支援事業所「GFTD WORKS」にて、ミニゲームコンテストが開催された。
初の開催で、主催側も応募側も調べながら動いていた。
そのときの、Unityで作ったアプリをApp Storeへ公開するまでの覚書を残しておく。
UnityとAppleのアカウントは、主催側が用意したものを使用。
公開作業を行ったのは、2020.01下旬頃。
Version: Unity 2018.4.12f1, xcode 11.3.1

[iOSアプリをリリースする際のプロビジョニングの設定 | 知の壺](https://chinotsubo.com/ios-provisioning-config/)
実機テスト時のsigning設定。developerとdistributionの混合がキモ。

[Bulk Resize Photos](https://bulkresizephotos.com)
スクリーンショットのリサイズに大活躍した。ただし、スクリーンショットの差し替えにはAppのバージョンアップが必要で、「とりあえず全機種間に合わせで突っ込んどいて後でちゃんと綺麗なの撮ろう」と

元記事を表示

UIScreenEdgePanGestureRecognizer が Simulator で反応しない件

# 今回解決したいこと

iOS 7 から追加された `UIScreenEdgePanGestureRecognizer` を使えば、通常のパンジェスチャー(ドラッグジェスチャー)と違って、画面の左端からパンしたときだけに反応するエッジパンジェスチャーを実装することができます。
しかし、なぜかシミュレーターで実行していると、[本当は反応するはず](https://stackoverflow.com/questions/19127383/is-it-possible-to-do-an-edge-swipe-in-ios-simulator) が、反応しない!!!という罠にはまりました。

# 解決法

シミュレーターで、 **ベゼル表示をオン** にすれば画面端からパンすることができます!!!

こう?(ベゼル表示オフ)
Screen Shot 2020-03-10 at 18.10.58.png【翻訳】あなたの(多分)まだ知らない iOS パフォーマンスアドバイス(元アップルエンジニアから)

本記事は[この記事](https://www.fadel.io/blog/posts/ios-performance-tips-you-probably-didnt-know)の日本語訳です。翻訳許可を[いただいております](https://www.fadel.io/blog/posts/ios-performance-tips-you-probably-didnt-know/#comment-4822809038)。

以下翻訳:

もし Cocoa 開発やソフトウェアビジネスのブートストラップについての最新の記事を常にキャッチアップしたいなら、ぜひ [Twitter で私をフォロー](https://twitter.com/ronyfadel)するか[メールリストを購読](https://mailchi.mp/bc3065c5892d/fadelio)してください。

![陸上トラック](https://www.fadel.io/blog/public/racetrack.jpg)

開発者として、パフォーマンスの良さは我々のユーザにワクワクと嬉しさを与えるのに評価しきれ

元記事を表示

新 App Store 審査ガイドライン 翻訳&差分ガイド 2020年3月号

# はじめに

これは2020年3月4日付けで変更された App Store 審査ガイドラインの翻訳&差分ガイドです。

[前回](https://qiita.com/midnightSuyama/items/655d52f61132d11bf1c5)からの主な変更点は、プッシュ通知の広告利用や飽和カテゴリの更新などです。これまでプッシュ通知の広告利用は禁止されていましたが、条件付きで認める方針に変更されました。App Store で飽和しているカテゴリには、占いや出会い系が加わり、該当アプリの審査は厳しくなるようです。

`multi-player` から `multiplayer` への変更など、軽微な変更は修正項目から除外しています。

https://developer.apple.com/app-store/review/guidelines/

## 修正の撤回

1.4.4 と 5.1.5 について、改訂翌日に変更が無かったことにされているため、改訂当日に確認した方は注意が必要です。
急遽撤回されただけなのか、明示しない方針に変えたのか、真意は不明ですが、少なくとも文書上

元記事を表示

[iOS]カスタムドキュメントにサムネイルを表示する

# iOSとファイルのサムネイル

iOSでは、Mac同様にファイルを扱う機構が存在します。
標準では「ファイル」アプリを通してiCloud Driveやローカルのファイルにアクセス出来ますし、それぞれのアプリでは`UIDocumentPickerViewController`を使ってアクセスすることも出来ます。

![IMG_1408.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/38f5f863-fec8-6256-edfe-03f751bf3383.jpeg)

これらのファイルブラウザではjpegやpngなど標準的なファイルフォーマットのサムネイル表示が標準で実装されています。

image.png

また、サムネ

元記事を表示

【Swift】iOS13でStoryBoardではなくXibから起動する

# なんでXib(Xcode Interface Builder)を使うの??
Xibとはアプリケーションの画面をレイアウトする時に使うやつです。
基本的な扱いはStoryBoardと似ています。

【Xibのメリット】
作った画面を複数の画面で再利用するのが簡単
画面の1部のパーツを作ることができる

【Xibのデメリット】
ファイル数が増えがち。。。
画面遷移の関係が可視化されない(コードで書くから)

# 今回やってみること
アプリ起動時の初期画面をXibで作った画面に設定する(iOS13で実現)
iOS13からは、SceneDelegateがテンプレートとして標準化されているのでiOS12以前のやり方と少しだけ違うみたいです。

# 実装の方法
では、早速作っていきます
### ViewControllerとXibファイルを作成する
とりあえず、プロジェクトを作ります。そしたら、画像のようにプロジェクトのフォルダを選択してください。
create_project.png初めてswiftでユニットテストを書いてみた

お久しぶりの投稿になってしまいました。

今までは

– [ストップウォッチ](https://qiita.com/sventouz/items/91faaa4ccdf02a5788bd)
– [タイマー](https://qiita.com/sventouz/items/e419ef5a9955ce06d043)
– [TODOアプリ](https://qiita.com/sventouz/items/ac29ed25f3ffc697a9d8)
– [電卓](https://qiita.com/sventouz/items/07c69235e6760cbdf5b1)
– [天気予報(API)](https://qiita.com/sventouz/items/07c7137e07a580a93cd7)
– QRコードジェネレーター(API)
– [ひらがな化(API)](https://qiita.com/sventouz/items/318d8370ab489724c454)

と細々したものにチャレンジしてきたのですがここらで少しSNSのようなものを作成したいなと思い2月はIns

元記事を表示

ViewControllerのviewIfLoaded?.windowが切り替わるタイミング

試したところ、`viewWillAppear/viewWillDisapper`系のライフサイクルイベントが呼ばれるタイミングと連携する模様。
つまり、presentする際には、`.fullscreen/.overfullscreen`で挙動が変わる。

元記事を表示

Firebase iOS SDK(Crashlytics)をCarthageで管理する

# はじめに

**Firebase iOS SDK**を導入したのですが、**CocoaPods**管理の場合に**ビルド時間がかかる問題**がありました。
このため、**Carthage**で管理するように変更した内容についてまとめました。

なお、基本的にはFirebase公式リポジトリにある[Carthage.md](https://github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md)に記載されている手順通りに対応することで**Carthage**管理することができます。
以下では、上記手順に沿って対応する中でいくつかハマった点について詳しく説明していきます。

## 今回導入した**Firebase iOS SDK**

* **FirebaseCrashlytics**

## 実行環境

|環境|バージョン|
|:-:|:-:|
|macOS Catalina|10.15.3|
|Xcode|11.3.1|
|Firebase iOS SDK|6.18.0|

# Firebase iOS SDKをC

元記事を表示

OTHERカテゴリの最新記事