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

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

WidgetKitで初心者の躓きどころ

# WidgetKitで初心者の躓きどころ
WidgetKitをみたら、いくつか躓きどころが合ったのでまとめてみました。

特にWidgetはメインのTargeと別なので
Targetが違うと色々参照できるようにする必要があります。

## 1. メインのターゲットを参照できない
参照したいファイルのTargetMembershipにチェックを入れればOK
※一つのファイルにいろんな依存物があると、それら全てをtチェックしないといけないので、各オブジェクト毎にファイルを分けるべし。

## 2. メインのTargetとは別でWidgetのTargetを作成するのでLibraryが参照できない。
Testなどと同様LibraryのTargetも追加する必要がある。

### Cocoa Podsの場合
podファイルのWidgetのTarget内に“`inherit! :search_paths“`を指定OK
“`xml
target ‘SampleWidgetExtension’ do
inherit! :search_paths
end
“`

### S

元記事を表示

digisparkを使ってiOSのアクセシビリティのスイッチコントロール用の外部スイッチボックス作成

iPhone、iPadなどのiOSにはアクセシビリティという設定があって、その中のスイッチコントロールという機能を使うとスイッチで[iOS機器を操作](https://support.apple.com/ja-jp/HT201370)できるようになっています。

これの外部スイッチ用のスイッチボックスの作成メモです。

## iOSの外部スイッチ
とりあえずここではUSBで接続するもの

USBで接続する場合にはiPhoneやiPadに[Lightning – USBカメラアダプタ](https://www.apple.com/jp/shop/product/MD821AM/A/lightning-usb%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)(ipad proなどのようにUSB-Cのものに関しては[USB-C – USBアダプタ](https://www.apple.com/jp/shop/product/MJ1M2AM/A/usb-c-to-usb%E3%82%A2%E3%83%80%E3%8

元記事を表示

コードから学ぶStoryboardを用いたCocoa MVCアーキテクチャ

# 参考

[iOSアプリ設計パターン入門](https://peaks.cc/books/iOS_architecture)

# サンプルアプリ

[CocoaMVCSample](https://github.com/b150005/CocoaMVCSample/tree/main/CocoaMVCSample)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/386a17b8-14f8-dbd2-6177-da6f503d250b.png)

# Cocoa MVC

**Cocoa MVC**は、Appleが推奨する`MVP(Passive View)アーキテクチャ`である。
数多く存在するアーキテクチャパターンは、**Presentation Domain Separation**の概念を根底としており、
**アプリケーションのUI(Presentation, View)** と **UIとは無関係な処理(Domain, Model)** を分離することを目

元記事を表示

OHHTTPStubsでリダイレクトがうまくいくかどうかの単体テストは書かないほうがいい

リダイレクト処理がうまくいくことを保証するためにOHTTPStubsを利用して単体テストを記述しました。
僕の場合はローカル環境ではうまく動くのですが、パイプラインのVM上でその単体テストを動かそうとするとまれに失敗することがありました。

下記のIssueがそれに対応するようです。

https://github.com/AliSoftware/OHHTTPStubs/issues/230

非常に残念ですが、リダイレクトについては単体テストで担保しないか、OHHTTPStubsを用いないで実装するしかなさそうです。

ただ先輩に教えていただいたとおり、基本的にはURLSessionがリダイレクトの機能を持っているため、単体テストで担保する必要はないとは思います。

もしiOSのリダイレクトの挙動についての品質保証をどうされているか知見がある方がいらっしゃれば教えていただきたいです。

元記事を表示

Provisioning profile “” doesn’t include signing certificate ‘内容’が発生

# Provisioning profile “” doesn’t include signing certificate ‘内容’が発生
`Flutter build ipa`の時に発生

# 解決策
.Cettificateの’内容’
・Provisioning file(AutoではなくManualの場合)の’内容’
・XcodeのTARGETSのRunner→Build Settings→Signingの’内容’

を全て一致させる。(僕の場合の’内容’は’Apple Distribution’でした!!)

元記事を表示

‘Flutter/Flutter.h’ file not found flutter/.pub-cache/hosted/pub.dartlang.org/url_lau ncher_ios-6.0.15/ios/Classes/FLTURLLauncherPlugin.h:4:8が発生

# ‘Flutter/Flutter.h’ file not found flutter/.pub-cache/hosted/pub.dartlang.org/url_lau ncher_ios-6.0.15/ios/Classes/FLTURLLauncherPlugin.h:4:8が発生
`Flutter build ipa`
でこのエラーが発生しました。
原因はPodfileにありました

## ダメな方のPodfileのpost_install
“`
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings[‘IPHONEOS_DEPLOYMENT_TARGET’] = ‘11.0’
end
end
end
“`

## いい方のPodfileのpost_install
“`
post_install do |i

元記事を表示

Flutter build ipaで Module ” not foundが出る

# Flutter build ipaで Module ” not foundが出る
“`Podfile.js
# Uncomment this line to define a global platform for your project
platform :ios, ‘11.0’

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV[‘COCOAPODS_DISABLE_STATS’] = ‘true’

project ‘Runner’, {
‘Debug’ => :debug,
‘Profile’ => :release,
‘Release’ => :release,
}

def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join(‘..’, ‘Flutter’, ‘Generated.xcconfig’), __FI

元記事を表示

SwiftUIでライトモードとダークモードで画像を切り替える Light / Dark mode

“`swift
@Environment(\ .colorScheme)var colorScheme
var body: some View {
Image(colorScheme == .light ? “lightImage”:”darkImage”)
}
“`

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

元記事を表示

FlutterのCupertinoTabBarの高さやTextStyleを自由に変更したい

# はじめに

アプリの画面切り替えに使うTabBarの選択肢として、CupertinoTabBarは便利ですが、
CupertinoTabBarにもう少し設定を加えたい!って思っても、
引数に自分が調整したいプロパティがなくて、困った!ってことはないでしょうか。
そんなときの解決策の案の一つとして、今回の記事を紹介したいと思います。

# 通常のCupertinoTabBarを使用した場合

“`dart:main.dart
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}

class MyHome

元記事を表示

【Swift】カスタムインプットビュー対応のキーボードで隠されない文字入力欄を作る

iOSには普段利用するシステムキーボードがあります。
これとは別にサービスによってスタンプや絵文字など独自の入力を行いたい場合があります。

そのような場合に独自入力は別UIViewで表示/非表示を制御する方法もありますが、
`UITextField` ではカスタムインプットビューを使うことでキーボードの一部として扱うことが出来ます。

この記事では以下のような表示の作り方や入力しやすい工夫について記載します。

# キーボードで隠れないようにする
`UITextField`を追加しただけではキーボードを表示した際に隠れてしまいます。

初めてiOSアプリをリリースした話

## はじめに
こんにちは!初めましてsoraと申します!  
カレンダーアプリをリリースしたのでこちらにて紹介させてください!
ちなみに私は現在、22年卒の大学生でSwift歴は2020年9月~です。

## リリースしたアプリの紹介
今回リリースしたアプリは「Re:スケ」というカレンダーアプリです。このアプリは大学のゼミの卒業制作として3人でチームを組み作ったアプリです。
カレンダーアプリを作った理由は、みんなが使えるアプリを作りたいってなったのと今までカレンダーを扱ったアプリを作ったことがなかったので勉強したいからという割とざっくりとした理由でカレンダーアプリを作ることにしました。
AppStore: https://apps.apple.com/jp/app/re-%E3%82%B9%E3%82%B1/id1607735456
[ソースコード](https://github.com/sora5042/CalendarApp)はこちらです。
よろしければインストールして試してみて欲しいです!

## アプリ概要

元記事を表示

IoT用MEEQのSIMをiPhoneに刺してみた

「霊園ガイド」サイト開発日記の高橋です。<誰も知らんがな

さて、最近は、IoTのSIMもいろいろ提供されているけど、「ソニーネットワークコミュニケーションズ スマートプラットフォーム株式会社」という長い名前の会社から提供されてる月130円のSIMを発行してもらってiPhoneに刺してみたので、その手順をメモしておきます。

スクショをそのまま貼っていったので画像がでかくて見にくいかな。Qiitaのマークダウンに画像サイズを指定できないのだったけ?まぁ、引越しで忙しいから許してね。

MEEQとは
https://www.sonynetworksmartplatform.co.jp/meeq/about.html

SIMの発行はWebコンソールでまぁはじめてだと戸惑いながらも割と簡単にできるのだけど、今日は申し込んでSIMが届いて、アクティベーションまでは終わり、IPhonに「構成プロファイル」をダウンロードするところから書いていきます。

ちなみに届いたMEEQのSIMはこんな感じでマルチカットなタイプで、nanoSIM microSIM 標準SIMがどれでも使えます。

![I

元記事を表示

Pod install がエラーになる

>You may have encountered a bug in the Ruby interpreter or extension libraries.

Cocoa Podsをインストールした後、Pod installで上記のエラーが出たときは、ターミナルを一回閉じてみよう。

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)

元記事を表示

Top 5 Trusted iOS App Development Companies in the USA

![app development cost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133693/2b61ee45-409a-62b2-759b-387a5d4d6aae.png)
Here is the list of the best iOS app development companies that provide the best solution in the USA
AppsChopper:

AppsChopper is a reputable iOS app development company with offices in New York and Massachusetts. App developers build interactive and high-performing native applications for iPhone, iPad, and other iOS related devices. Our team has successfull

【Swift】テキストフィールド数値のみの入力制限

#

iOSでよく扱う入力制限についての備忘録です

“`swift
@IBOutlet private weak var quantityTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

quantityTextField.delegate = self
}

//省略

extension ViewController: UITextFieldDelegate {

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

guard let text = textField.text else {
return false
}

i

【Swift】Delegateメソッドでジェネリクスを使いたい時にassociatedtypeは使えない

## はじめに
今回は、Protocolにジェネリクスを引数に受け取るメソッドを定義したとき、
そのProtocolに書いたメソッドをDelegateメソッドとして、使いたい場合の書き方を記事にしました。

## 前提条件
Swiftにおける下記の3点について知っていること
– Protocol
– Delegate
– ジェネリクス

## このように書くとコンパイルエラーになる
#### ソースコード
“`swift
protocol SampleDelegate: AnyObject {
associatedtype T
func getSampleData(_ data: T)
}

class Fuga: SampleDelegate {
typealias T = String
func getSampleData(_ data: T) {
print(data)
}
}

class Hoge {
weak var delegate: SampleDelegate? // コンパイルエラー
}

Xcode 5でSpriteKitのSKTextureAtlasを使用する

SwiftUI ベースのプロジェクトで SpriteKit の SKTextureAtlas を使用したかったのですが、プロジェクトに “.atlas” サフィックスのフォルダを作成し、コンパイル時にアトラスを生成させる方法ではできなかったので、調査しました。

https://developer.apple.com/documentation/spritekit/sktextureatlas/about_texture_atlases

結論から述べますと、アセットカタログ (Assets.xcassets) に作成したフォルダをアトラスとして使用できます。

具体例を示します。次の通りにアセットカタログに “cat” フォルダを作成し、猫が歩くアニメーションのフレーム画像 (cat-walk.0 〜 3) を保存します。

“`text
Assets.xcassets
├─AccentColor
├─AppIcon
└─cat
├─cat_walk_0
├─cat_walk_1
└─cat_walk_2
“`

ソースコードで、`SKTextureAtlas` の

つかめエンジニアドリーム

*こちらの記事は転職ドラフト体験談投稿キャンペーンに参加しています(https://job-draft.jp/articles/251)

## はじめに
転職ドラフトを利用して、転職に成功(年収が2.4倍)したので、心境の変化の備忘録+異業種からエンジニアにジョブチェンジした方の参考になるんじゃないかな、と思い記録します。
興味ある箇所だけ読んでもらえれば幸いです。皆様が気になろうであろう年収についても、包み隠さず公開したいと思います。
よくある「エンジニアにジョブチェンジして成功しました」という自慢記事です。

## 経歴・職歴
|年|所属先|業務内容|
|:-|:-|:-|
|2011.04~2016.03|大阪の某国公立大学|学生(文系)|
|2016.04~2020.12|電子部品の専門商社(1社目)|営業|
|2021.01~2022.03|スマホアプリ専門の受託開発会社(2社目)|Androidエンジニア/PM/営業|
|2022.04~|自社開発Web企業(3社目)|Androidエンジニア|

### 大学時代
– 大学時代は、特に目的意識もなく、だらだらとバイトし

SwiftUIでSpriteKitを使用する

モバイルゲームアプリケーション開発を学ぶにあたり、Xcode のゲームテンプレートが作成する UIKit ベースのプロジェクトではなく、現在主流の SwiftUI ベースのプロジェクトで開発を始めたかったため、調べてみました。

## iOS 14以降の実装

学習を目的としたため、調べた中で最もミニマムな実装をしている次のサイトを参考にしました。

https://www.createwithswift.com/using-spritekit-in-a-swiftui-project/

iOS の App テンプレートで、インターフェースに SwiftUI、プログラミング言語に Swift を選択したプロジェクトを作成します。

プロジェクトへ GameScene.swift という名前の Swift File を追加します。GameScene.swift を次の内容へ書き換えます。

“`swift:GameScene.swift
import SpriteKit

class GameScene: SKScene {
override func didMove(to

[SwiftUI]Non-constant range: argument must be an integer literalの対処法

ForEachの引数に`id`を追加しましょう。idに設定するのは以下の記事が参考になります。

https://capibara1969.com/1650/