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

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

【Xcode】Swift Package Managerの使い方

# 追加

①: リポジトリのURLをコピーする
![スクリーンショット 2022-06-06 21.39.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/da86f855-485b-30e5-0973-35783ecca643.png)
![スクリーンショット 2022-05-07 15.06.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ebdf2dc3-754b-6382-ce48-3287a423abe7.png)

②: Xcodeのメニューバーの「File」を選択
![スクリーンショット 2022-05-07 15.07.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7a84e170-12a7-b2f6-ef2f-0291670921ad.png)
③: 「Add

元記事を表示

UIFont.TextStyleについて

ダイナミックタイプ(デバイスのテキストサイズ設定に、アプリのテキストサイズも対応する仕組み?)は公式ドキュメントでも推奨されている事なので、可能なら対応しましょう。

そこで今回は自動的にダイナミックタイプが対応されるUIFont.TextStyleについてまとめました。

# UIFont.TextStyleのフォントを使う方法
“`Swift:ViewController.swift
class func preferredFont(forTextStyle style: UIFont.TextStyle) -> UIFont
“`
UIFontのクラスメソッドであるpreferredFontメソッドを使います。
そしてstyleパラメータに希望のUIFont.TextStyleを指定すれば戻り値として指定のフォントが返ってきます。

# UIFont.TextStyle一覧
|UIFont.TextStyle|用途|
|:-:|:-:|
|.body|body(本文)用|
|.callout|callout(図の一部に線を引いて説明するテキストの事らしいです)用|
|.cap

元記事を表示

NCMBのFlutter SDKを使ってプッシュ通知を送信する(iOS編)

NCMBのコミュニティSDK(公式サポートは提供されていません)としてFlutter向けのSDKを提供しています。Flutter SDKはiOS/Androidはもちろんのこと、Webなどでも利用できます。つまりスマートフォンネイティブの機能は提供していません。

NCMBのプッシュ通知機能は数多くの方に使われている機能でもあり、今回はFlutter SDKを使ってどうプッシュ通知機能を使えば良いのかを紹介します。まずはiOS編です。

[ncmb | Dart Package](https://pub.dev/packages/ncmb)

## 利用するライブラリ

上述の通り、Flutter SDKにはネイティブ機能がありませんので、プッシュ通知で利用するデバイストークンを取得する機能がありません。そこで下記のライブラリを使います。

– [push | Flutter Package](https://pub.dev/packages/push)

## セットアップ

iOSの場合はiOS Dev Centerにてアプリを登録し、Push Notificationを有効にしま

元記事を表示

xcode_backend.sh: Operation not permitted【iOS】【Flutter】

# Error

“`
/bin/sh: /Users/xxxxx/Documents/dev/flutter/packages/flutter_tools/bin/xcode_backend.sh: Operation not permitted
Command PhaseScriptExecution failed with a nonzero exit code
“`

# Solution

If you open a app with xcode and another code editor, close another code editor.

元記事を表示

Xib、Storyboardを作成する上でのノウハウ

# この記事の対象者

– Autolayout のチュートリアルや入門書を読んだけど、実務のレイアウト作成が作りづらいと感じている人
– iOS のUI作成のガイドラインを作成したい人
– 他の開発者が Autolayout をどう使っているか知りたい人

## 公式ドキュメント

[Auto Layout Guide
](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html)

## Storyboardのノウハウ

– StoryboardにViewが多いとXcodeで開くときに時間がかかる
– Storyboardは分割して使用しよう
– 可能ならXibにしよう
– SegueをStoryboard上で使うと動作が重くなるので、画面が少ないアプリ以外ではやめておこう
– 分割すると、Storybaordで何をやっているかわからなくなるが、動作が重いデメリットは大きい
– UINaviga

元記事を表示

Point Free製のURL-ROUTINGを使ってディープリンクのルーティング書くとめちゃくちゃ便利でした

# Point Free製のURL-ROUTINGを使ってディープリンクのルーティング書くとめちゃくちゃ便利でした

## 動機

使用してみて便利だったので記事にします。

DeepLinkで渡っていたURLをどう処理するかを、文字列をゴニョゴニョすることなく、
うまくルーティングすることができたので備忘録として残しておきます。

SwiftでiOSアプリ開発だけでなく、サーバーサイドにも使用できるそうです。

## ルートをenumで定義する

ルーティングをenumで定義していきます。

“` swift
enum AppRoute {
case books
case book(id: Int)
case searchBooks(query: String, count: Int = 10)
}
“`

URLごとに、どういうPathで渡ってきた場合、
どのcaseで返せばよいかを記述します。
パラメータとして渡される場合、どんな型で渡されるかも記述します。

元記事を表示

Apple Developer Programを自動更新にする方法

Apple Developer Program は年に一度、更新が必要で30日前になると下記のようなメッセージがAppStoreConnect上に表示されます。

![appStoreConect.001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1281022/500160e8-83c3-5a55-c0ec-859982bdde4a.png)
自動更新がうんぬんと書いていますが、青字のApple Developper Webサイトからだと日本は自動更新に対応しておらず毎度、手動で更新する必要があります。
日本語でApple Developer Programの更新について解説しているサイトではこのように解説していますが、StoreにあるApple Developer Appからだと通常のアプリと同様にサブスクリプション契約できます。
IMG_3496.PNGUnity as a LibraryをXCFramework化してiOSの実機とシミュレーターの両方で動かせるようにする

**[Unity as a Library](https://unity.com/ja/features/unity-as-a-library)**(以降、`UaaL`と省略)をiOSネイティブアプリに組み込んだ上でシミュレーターで動かそうとした所、以下のような課題に直面しました。

– **Unityが実機向け or シミュレーター向けのどちらかでしかビルドできない問題**
– UnityのiOSビルドは元より「実機向け」か「シミュレーター向け」かのどちらかでしかビルド出来ないという制約が存在するが、**UaaLを組み込んだネイティブアプリ側でも同じ制約が発生してしまう**
– → 例えば「[Player Settings -> Target SDK](https://docs.unity3d.com/Manual/class-PlayerSettingsiOS.html#Config-Device)」に`DeviceSDK`を指定してビルドしたUaaLをネイティブアプリに組み込んだ場合には、ネイティブアプリ側も実機でしかビ

UIWebViewからWKWebViewへの移行時、対応したはずなのにAppStoreConnectへ反映されない

# 何があった
2020年ころにWKWebViewに移行しないとアプリが公開できなくなるということがあった。
WKWebViewに対応してアップロードしたが、何故かAppStoreConnectで弾かれ続けていたという事象です。
化石アプリで更新が止まっているアプリだとまだUIWebViewあるかもしれないので一応残しておきます。

# どういう事象よ
参考:[【iOS UIWebView廃止の対応策】(2020年12月対応必須)cordova利用のハイブリッドアプリにおける「WKWebView」への移行対応について](https://b-risk.jp/blog/2020/08/uiwebview_to_wkwebview/)

AppStoreConnect上で起きていた事象は、上記の記事で書かれている内容とほぼ同じです。
AppStoreConnectへはアップロード出来ていたのですが、該当のビルドバージョンを処理中…のような表記がしばらく出た数分後、何事もなかったように消え去りました。
この時、本来であればAppleからメールが来るので原因に気づけるはずですが、当時はメール

XCode13で使用しているライブラリのバージョンが勝手に書き換えられる件の対応

# 何が起きたか
いつも通りアプリリリースのためにビルドをアップロードした。ところがなぜかアプリの動作がおかしい・・・。
確認したところ、ライブラリのバージョン(CFBundleShortVersionString)がアプリのバージョンに書き換えられていたことにより障害となっていることが発覚した。

# なぜ起きたか
XCode13から追加された「Manage Version and Build Number」にチェックを入れると再現される。
ライブラリのバージョンがアプリのバージョンで上書きされる。
確認方法は、アップロード前の確認画面でライブラリのバージョンを確認するとよい。

# 参考
[Xcode “Manage Version and Build Number” option](https://stackoverflow.com/questions/68237292/xcode-manage-version-and-build-number-option)
[Xcode 13 app archiving is modifying framework plist](https:

マークダウン記法の基本・書き方

## マークダウン記法の書き方
会議の議事録や社内ドキュメント、自分のメモを効率化するためにオススメなのが、「**マークダウン記法**」。上記の見出しや強調、文字装飾が簡単にできるので、読みやすい文書ができ、業務効率が上がる。

初回は、簡単にできる「マークダウン記法」の基本と使い方について解説します。

#### 改行
行末で「**半角スペース**」を「2個」入力すると改行される。
【例】
表記:私は〇〇です。(半角スペース×2)よろしくお願いします。
表示:私は〇〇です。
   よろしくお願いします。

#### 見出し
冒頭に「#」を入力することで見出しを作ることができる。「#」の数によって見出しの大きさを変えることができる。
【例】
表記:# Blogの書き方
   ## Blogの書き方
   ### Blogの書き方
表示:
# Blogの書き方
## Blogの書き方
### Blogの書き方

#### 箇条書き
文字の前に「*」(アスタリスク)をつけることによって箇条書きになる。
【例】
表記:
*Twitter
*Instagram
*LINE
表示:
* Twi

SwiftUIのLazyVGridで表示した画像のメモリを解放したい

## ObservableObjectを使って実装

– ObservableObjectのinitと画像取得がlazyに実行されていることが確認できる
– しかしスクロールしていってもdeinitが呼ばれない
– したがって画像のメモリも解放されず、アプリの**メモリ使用量が増え続ける**

“`swift
struct ContentView: View {
var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))]) {
ForEach(0..<1000, id: \.self) { id in SwiftUIImageView(id: id) .frame(width: 100, height: 100) } } }

【iOS】iOSのBLEのセキュリティ関連の振る舞いを調べてみるby M5Stack

# はじめに

Corebluetoothの実装について記載していきます。

[①その1:BLEにおける役割](https://qiita.com/JunNonaka/items/348eeecc63cbce4cfed0)
[②その2:セントラルの実装](https://qiita.com/JunNonaka/items/cde2f4f3934a3d452770)
[③その3:ペリフェラルの実装](https://qiita.com/JunNonaka/items/c7bd386e4a3aa5e245d3)
[④その4:セントラルとペリフェラルで通信させてみる](https://qiita.com/JunNonaka/items/13bee62e911471b5a736)
⑤番外編:iOSのBLEのセキュリティ関連の振る舞いを調べてみる←今回はここ

今回はCoreBluetoothの使いかたというよりもiOSのBLEのセキュリティ関連の振る舞いについて記述していきます。

# 開発環境

+ iOS 15.5
+ M5Stack-Core2

# 導入
BLEの機器をiOSと接続す

【2022年版】Cisco ルータ コマンド メモ

# Cisco ルータ コマンド メモ

– Cisco Packet Tracer上におけるコマンド利用のメモ
– [Cisco Packet Tracer のダウンロード](https://www.netacad.com/courses/packet-tracer)

## 設定モードへ

“`
>enable
“`

## 共通設定

– ドメイン名を引かせない(コマンドをミスタイプすると名前解決しようとする不便を解決)
“`
(config)#no ip domain-lookup
“`

## 設定保存
### 現在の設定を起動時設定に保存

“`
#copy running-config startup-config
“`

## パスワード設定

“`
(config)#enable password {password}
“`

## ユーザ設定/作成

“`
(config)#username {username} password {password}
“`

## ホスト名・ドメイン名・NTP・DNS設定

“`
(config)#hostn

【SwiftUI】ForEachの警告について

# 該当コード
“`swift
import SwiftUI

struct ContentView: View {
let fruitArray: [String] = [“りんご”, “みかん”, “ぶどう”, “いちご”, “ばなな”]
var body: some View {
ForEach(0..

XCODE オフラインでビルドしたい!

オフライン環境でテストしようとしたときにネットワーク接続で証明書の確認をしたいなどのエラーで実機ビルドができなかった。

とりあえず、Provisioning Profileをオフライン(7日間)機能を追加して、作成したら動きはしたが、7日後の期限を切れたら動かなくなった。

Build SettingからApple Developperを選択し、Provisioning Profileも合わせて選択しても動かなくなった。
EntitleMentを消してから実行なども試してもだめだった。

Bundle Idtinferを変更して、Provisioning Profileも合わせて作成して、EntitleMentを消してから実行などをしたら、いけた。
たまたまかもしれないので、雑な自分用メモ

スマホアプリのコマンドビルドまとめ(Xamarin編)

前回の『[スマホアプリのコマンドビルドまとめ(iOS編)](https://qiita.com/gremito/private/41cf9a0c8d27eccdf165)』に引き続き、今回は**XamarinのCI環境を作る際に溜まった知見**をまとめた記事です。

前提として、Mac mini/Mac Pro(ゴミ箱)などにCI環境を作り、その際にXamarinアプリの.ipa/.apkファイルをビルドする環境も作るときに必要な作業として淡々とまとめています。

## 環境

* macOS
* CI
* Jenkins
* Xamarin
* MyApp.iOS.csproj
* MyApp.Droid.csproj

## `msbuild`と`xbuild`について

XamarinのアプリをCLIからビルドしたいと思い、『xamarin mac build command』という感じでググっていると`MSBuild`と`xbuild`についてちょいちょい出てきます。Xamarinなので記事が古いものが多く引っかかり、個人的に参考になった記事の中で[

【Swift】Object file (XXXXXXXXXXXX) was built for newer iOS Simulator version (14.5) than being linked (14.1)を修正する

意味のわからない警告文が出てきた

ビルドに支障はないが気になるので消したい
“`
Object file (/Users/XXXXXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXXXXX/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/XXXXXXX/XXXXXXXXX.framework/XXXXXXXXX(XXXXXXXXXXXX)) was built for newer iOS Simulator version (14.5) than being linked (14.1)
“`

# 解決策
`Build Settings`で`Other Linker Flags`と検索します。
![スクリーンショット 2022-06-01 22.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6b618c70-abe1-127c-53b5-5d6a7a

【Swift】脱獄を検知する

# はじめに
iOS端末は脱獄(JailBreak)するとappleからの制限を解除する事ができます。
制限が解除されるとアプリ開発者が触れて欲しくない値にもアクセスされる可能性があり、よろしくないです。
このような行為により、チートが発生します。

今回は脱獄端末を検知してみようと思います。
ただ、今回紹介する方法では脱獄検知回避ツールを使われてしまうと簡単に破られます笑

# 実装
`Jailbreak`というフラグを作って脱獄判定を行います
“`swift
import SwiftUI

struct ContentView: View {
@State var Jailbreak: Bool = false
var body: some View {
Text(Jailbreak ? “❌: 脱獄あり” : “✅: 脱獄なし”)
}
}
“`

脱獄判定の1個目は「脱獄した際に生成されるファイルが存在するか確認」する方法です。
“`swift
// 脱獄した際に生成されるファイルが存在するか確認
func isDeviceJailB

【iOS】エフェクト付き音楽プレーヤーアプリの実装

# はじめに
最近「音音(ネオン)」というiOSの音楽プレーヤーアプリをリリースしました。

こちらのように曲のテンポの速さやキーの高さを変更できたり、

こちらのように曲の区間を設定し、繰り返し聴くことができます。