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

iOS関連のことを調べてみた2021年09月12日
目次

EUC-JPでURLエンコーディングする

#はじめに
クエリを含むURLを作成したい時には、URLエンコーディングを行う必要があると思います。
EUC-JPでエンコードする記事はあまり見かけないのでまとめます。(今どき、EUC-JP使っているサーバーなんてほぼないと思いますが。。。)
ご参考になればと思います!

# 実装してみる
今回は String の Extension で実装します。

“`
import Foundation

extension String {
var encodedByEUCJP: String {
// エンコーディングしない文字列をキャラクタセットとして定義
let allowedCharacters = CharacterSet(charactersIn: “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~”)

// エンコーディングを定義する
let eucjpEncoding = String.Encoding(rawValu

元記事を表示

【Flutter】社内向け入門講座の内容公開

インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)

## 本記事で伝えること
– Flutterを用いた簡単なアプリ開発デモ
– 開発効率をあげるTips
– デバッグ方法
– おすすめパッケージ
– アーキテクチャ紹介
– やっておいたほうが良いこと
– 知っておいて損しないこと
– 情報収集源

## 本記事を読む前に
本記事を読む前提として以下を実施済みですと、より内容が理解しやすいかと思います。
– Flut

元記事を表示

【iOS】Metal Best Practicesの解説(9) ロードと保存

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Load and Store Actions(ロードと保存)](https://devel

元記事を表示

fastlane match で既存の秘密鍵、証明書、プロビジョニングを取り込む

## 想定ケース

– 諸事情により Apple Developer Portal へのアクセス権限がない
– 手元に秘密鍵、証明書、プロビジョニングのファイルはある、もしくは Keychain に取り込み済み
– ファイルで直接やりとりするのではなく、 fastlane match で管理したい

## 作業手順

### 前提

– fastlane 2.193.1
– fastlane match 導入済みで、Storage の整備や Passphrase についても設定済み
– 秘密鍵、証明書については有効なものを Keychain に取り込み済み
– プロビジョニングについては有効なものがファイルとして手元にある

### 秘密鍵、証明書、プロビジョニングの用意

秘密鍵と証明書を Keychain からファイルに書き出します。

この際、開発者間でやりとりする場合のように、 Keychain 上で秘密鍵と証明書を2つ選択して1つの p12 ファイルとして書き出すのではなく、秘密鍵と証明書それぞれ1つずつ選択した状態でファイルに書き出していきます。

ファイルの拡張子について

元記事を表示

fastlaneのdeliverからAppStoreのメタデータ送信する際の留意点

## 概要
2021/08現在における `fastlane deliver` を使った AppStore へのメタデータ送信について、ドキュメントが少なかったので留意点を記しておきます。

## 前準備
#### ■ AppStre API Key

2021/08現在では `deliver` からメタデータをCI経由で送る場合 `AppStore API Key` が必要です。
これがないと 2FA をクリアできないので、、
ローカルで実行するだけであれば、`fastlane` で利用できる通常のログイン機構で大丈夫です。
その場合、コマンドの途中で 2FA のパスワードを求められることになります。

ちなみに.envなどを利用して環境変数に必要keyを格納し、下記のようにAPIKeyを取得できるような `fastlane private action` を `Fastfile` に作っておくと便利です。

“`ruby
#### App Store API への認証Key生成

desc “App Store Connect API Key”
# private_lane :ap

元記事を表示

[Flutter][iOS] permission_handler 不要な権限リクエストを削除しないとApp Store Connectから怒られる

**アプリをApp Store Connectに送信した際に(CI/CDで自動配布した際に)警告メールが届き、testflightでアプリをまくことができなかった**
原因:どうやらAppleの静的解析ツールに引っかかっているらしい

アプリのOS権限管理をpermission_handler 8.1.4+2にした後、ビルドしたバイナリをApp Store Connectに送信したら以下のようなめっちゃ長いメールが届いた。そんな場合の対処法をメモ
結論として、iOSのセットアップとして公式に記述されている方法と少し違った?ので注意が必要。
###来たメール
>
App Store Connect
>
Dear Developer,
>
We identified one or more issues with a recent delivery for your app, “hoge-app” 1.0.0. Please correct the following issues, then upload again.
>
ITMS-90683: Missing Purpose St

元記事を表示

iOSとAndroidを区別するのに便利なJavaScript置いておくね

“`
var isAndroid = (UA && UA.indexOf(‘android’) > 0) || (weexPlatform === ‘android’);
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === ‘ios’);
“`

これは基本的にユーザーエージェント(UA)を見て正規表現でandroidかiOSかを判別しています。`UA &&`の部分はnullチェックですね。UAの値を取得できなかった時にエラーで落ちないようにしています。

日本のスマホのシェアはAndroidとiOSが99%を占めているので上記以外はその他で例外処理をしてしまって良いでしょう。

元記事を表示

Compositional Layoutsで水平方向のスクロール出来た!けど、垂直方向にもスクロール出来てしまう時の対処法

# 現状
![CompositionalLayoutsHorizontal現状.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/e99086e2-908a-ee3e-39b2-640e8c3a35bc.gif)
# 解決策
以下のコードをCollectionViewに対して設定することで解決しました。

“`swift:ViewController
collectionView.isScrollEnabled = false
“`
![CompositionalLayoutsHorizontal改善.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/613932cf-7412-d374-7b64-4c3ed038c338.gif)

# 検証したこと
以下のdelegateメソッドを呼んで水平スクロールと垂直スクロールの時の挙動を調べた。

“`swift:ViewCont

元記事を表示

iosアプリで車種と走行距離から炭素排出量を計算するプログラム

# 人間は炭素でてきている

![124107813116516430885.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33704/f47716c7-efcb-e38f-11bc-0640bc550493.jpeg)

「水35L、炭素20㎏、アンモニア4L、石灰1.5㎏、リン800g、塩分250g、硝石100g、硫黄80g、フッ素7.5g、鉄5g、ケイ素3g、よし構築式を書くぞ。あとは魂の情報だ、、、」

エンジニアのみなさまにおかれましては常に真理の追及をしていると思いますが人体錬成をするさいにはリスクを考慮したいところです。いろいろと持ってかれる可能性があります。手とか足とか弟とか。

と、話を大きくそらしますが、先月から電通イノベーションスタジオ@サンフランシスコで働いています。案件が大量に降ってくるので忙しくて大変です。エンジニア仲間が欲しいのでこうやってネタ記事を書いてる次第です。

この記事が面白かったらGoodボタンとチャンネル登録とエントリーをお願いします!

https://ww

元記事を表示

iOSのLINEの内臓ブラウザが、POSTフォームのtarget=_blankで挙動が狂う件

# 概要
iOSのLINEブラウザの挙動がおかしくてはまりました。

# 現象

環境:iOSのLINEとYahooの内臓ブラウザ(ほかにもあるかもしれない。)
条件:POSTメソッドのformタグで、target=”_blank”が指定されている
結果:formのaction先には遷移するが、formのパラメータはすべて抜け落ちる

# 再現

## 1. コード

“`html:html01.html



targetなしPOSTフォーム

元記事を表示

【SwiftUI】よくあるインジケーター表示切り替えを、ProgressViewとカスタム ViewModifierで使いやすくする

## はじめに

SwiftUIには、ローディング中とかにぐるぐるするインジケーターが`ProgressView`として用意されています。

大抵こういうViewは共通化されると思うので、使いやすくするためにProgressViewの カスタム ViewModifierを作ってみました。

普通にViewにしてもいいと思ったのですが、
Viewにすると多分こうなってしまうと思います↓

使う側では、毎回`ZStack`で囲わないといけないので、面倒な気がします。

“`swift
ZStack {
Text(“Hello World”)

if showProgressView {
CustomProgressView()
}
}
“`

そうではなくこうやって使えた方が、`ZStack`とか不要だし便利だろうと思ったので、ViewModifierで実装してます。↓

“`swift
Text(“Hello World”)
.customProgressView(showProgressView: $showProgressView)
“`

## 成果

元記事を表示

iOS13 / iOS14 /iOS15 で、AppDelegateのライフサイクルは違うよ 14がおかしいんだけど

以前書いた記事

https://qiita.com/bird_tomita/items/62cb49e0835826775c8a

で、OSによってコロコロ変わるライフサイクルに苦しめられてることをぼやかずに分析だけしたのですが、iOS15でもまたまたライフサイクルが変わっています。**いい加減にしてほしい!**

結論から言うと、iOS14だけおかしかったのです。iOS13もか。
iOS15では、iOS12以前のライフサイクルに戻っているようです。

### iOS15
-[AppDelegate application:didFinishLaunchingWithOptions:]
-[ViewController viewDidLoad]
-[ViewController viewWillAppear:]
-[ViewController viewDidAppear:]
-[AppDelegate applicationDidBecomeActive:]
-[ViewController applicationDidBecomeActiveNotification:]

###

元記事を表示

【Swift】QRコードの分割情報を取得する

iOSアプリでQRコードを読み込もうとしたら、QRコードが分割されている場合があることを知りました。

お薬手帳や車検証などにも使われているみたいです。

iOSアプリでその分割情報を取得する「これだ!」って方法が見つからなかったのでまとめておきます。

「いやいや、もっといい方法があるよ」という方はコメントいただけると助かります。。。

## 分割QRコードについて

![スクリーンショット 2021-09-08 1.11.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426420/97f612c9-3c69-1932-0943-44dbedd401e7.png)
QRコードがなんぞやっていうのは割愛します。
ググってくださいませ。

今回伝えたいのは、QRコードは分割されることがあるということです。
上記のような2つのお薬手帳用のQRコードは2つ揃って必要な情報を取得できます。

1つのQRコードが保持できる情報量は決まっているため、
上限を超える情報量を出力するためにQRコードは分割できるっ

元記事を表示

【Flutter】カウンターアプリに書かれたコメントを解説する

`flutter create` で新しく Flutter プロジェクトを作ると自動生成されるのが「カウンターアプリ」であることは、Flutter を触ったことがある方であればピンとくるのではないかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134943/20a5ec25-afe9-548f-0cff-32bb81fc16d1.png)

Flutter アプリ開発者にとっての初めの一歩とも言うべきカウンターアプリですが、その `main.dart` に書かれているコメントを読んだことがあるでしょうか。私は毎回全置換で消しています。

ただ改めて考えてみると、このコメントも __Flutter フレームワークの開発チームが Flutter アプリ開発者のためにわざわざ書いてくれたもの__ だと思いますので、この記事ではそのコメント全てを翻訳しながらしっかりと内容を確認してみたいと思います。

また、初学者向けの簡単な解説も交えつつ書いていければと思いますので、何かの役に

元記事を表示

【ReactNative】アプリのプロフィール画像を変えるときに下から出てくる選択欄(アクションシートというらしい)を作ってみる

#画像のようなタップしたときに下から出てくる選択欄(アクションシート)を実装していきます。
![スクリーンショット 2021-09-02 19.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/a376d67b-7783-c693-5df1-e8dc538e6428.png)

この機能はよくアプリのアイコンや写真を設定する時に使われていると思います。
実際にはiPhoneのappleIDのアイコンやLINEのトップ画を設定するときに使われています

##プロジェクト作成、必要なライブラリをインストール
まずはReact-Nativeプロジェクトを作成します。
ちなみにExpoではなく、素のReactNativeで作っていきます。
作成方法はドキュメントなどを参考に進めてください。

#####次に必要なライブラリをインストールします
yarnの場合“`yarn add react-native-cross-actionsheet
“`npmの場合“`npm install

元記事を表示

【React Native】axiosを使ってAPIの共通処理を実装する

#APIの共通処理を実装
大規模な開発になるとフロントからたくさんのAPIを叩くことになります。
そこでAPIを叩く際の共通処理を作成し、毎回詳しく記述しなくて済むようにしたいと思います。
今回はaxiosを使って実装していきますのでインストールしておいてください
“`yarn add axios“`

##APIの共通処理を実際に作っていく
api.tsを作成

“`javascript
import axios from ‘axios’

export const api = axios.create({
baseURL:’https://jsonplaceholder.typicode.com/’,
})

// api.interceptors.request.use(
// config.headers.authorization= `Bearer ${ここにアクセストークンを入れる}`
// )

api.interceptors.response.use(
response => {
return response
}

元記事を表示

型キャスト(as, as!, as?)について

Swiftの勉強をしていて、asが出て来ることが多いので、自分なりに調べてまとめてみました。

参考記事
・https://fukatsu.tech/swift-cast
・https://qiita.com/entry909/items/3c4c9a20bce0c903dc39
・http://blog.andgenie.jp/articles/803

##キャストについて
キャストとは、asという演算子を用いて変数や定数を具体的な型にはめ込むことです。

## asについて

asは、演算子の一種で2種類の変換を実行することができます。

1. 保証変換
1. 強制変換

### 保証変換
保証変換とは、別の型に変換するときに、コンパイラ可能な場合キャストの成功が保証されるような変換です。
例えば、アップキャストというのがあって、クラスの継承やプロトコルの準拠などの階層関係がある型同士においてキャストを行うものです。

“`
let str = “アイウエオ”
let any = str as Any
“`

### 強制変換

強制変換とは、変換するときにコンパイラで安

元記事を表示

Swift – viewの影

swiftでviewに影をつける基本の四つのプロパティ

“`simple.swift
testView.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
testView.layer.shadowColor = UIColor.black.cgColor
testView.layer.shadowOpacity = 0.6
testView.layer.shadowRadius = 4
“`
#影の方向 shadowOffset
heightは縦方向です、正数は下、負数は上です。
![截圖 2021-09-06 21.46.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/b63b460f-8eba-ec2d-003a-463dc61b17b7.png)
![截圖 2021-09-06 21.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

iOSで Qiita API v2 を叩いて自分の記事一覧を取得する

# テスト投稿
iOSで [Qiita API v2](https://qiita.com/api/v2/docs) を叩いて自分の記事一覧を取得する。

元記事を表示

【初心者向け】ディープリンク技術の概要と注意点

チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。

基本iOS目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。

私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。

※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い”URL”に統一して記述しています。

# ディープリンク (Deep Link) とは

任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。

スマホアプリで代表的なユースケースは以下のとおりです。

– スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。
– Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。

# ディープリンクを実現する仕組み

## カスタムURLスキーム

– URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。

元記事を表示

OTHERカテゴリの最新記事