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

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

コードでUISwitchを押したことにする

#やりたかったこと

**「UISwitchをタップしたら○○すること」**
というテストを書きたいけどコード上でタップさせる方法がわかりませんでした。
検索ワードが悪いのか、調べてもなかなか欲しい答えが見つからず…
前にも一度書き方がわからなくて悩んだ気がするので、自分の備忘録として残しておきます。

#.isOn と .sendActions を必ずセットで使う
結論、たったの二行でタップさせることが出来ました。
.isOnを書き換えてから.sendActionsで変更したことを知らせるだけ?

“`
switch.isOn = true
switch.sendActions(for: .valueChanged)
“`

元記事を表示

typo多い自分にとって過去一レベルで便利だったXcodeの機能

## はじめに
**※この記事はXcode使う方向けです。**

レビューでtypo指摘されるとすごく恥ずかしいですよね。。
完璧だぜ!って思って指摘がtypoってもう。。。

**そんなこんなでチェックツール探してたんですが、
なんとそもそもXcode11からチェック機能ついてたやつ〜!**

## 使い方

至ってシンプルです。
動作も遅くなるとかナッシング。

Edit > Format > Spelling and Grammar > Check Spelling While Typingでタイピングごとにファイルにチェックが。

例えばそのプロジェクトでしか使わない「hogehoge」とか造語も引っかかるんですけど

Ignore Spelling(スペルを無視)かLearn Spelling(スペルを学習)で頻出単語は警告を消します。

## 最後に

いや、英語力を上げるのが良いってのは分かるんですが誰にでもあるじゃないですか、typo。

そんな時にこれで精神衛生的にも楽だし、レビューも手間省けるしで良いと思いました。
感謝。

元記事を表示

ReactiveSwiftの@MutablePropertyを使ってSwiftUI/Combine時代に備える

ReactiveSwiftに`@MutabelPropety`というProperty Wrapperが最新の6.3.0で追加されました。https://github.com/ReactiveCocoa/ReactiveSwift/releases/tag/6.3.0
これはCombineの `@Published` に似ています。そのため`@MutabelPropety`を使っておけば、仮にReactiveSwiftからCombineに移行したくなった場合に、少ない変更で移行できると思うので紹介します。

“` swift
class MagazinesPublisher {
@MutableProperty private(set) var magazines: [Magazine] = []
@MutableProperty private(set) var errorMessage = “”
@MutableProperty private(set) var isLoading = false

var country = Country() {

元記事を表示

仕事を辞めて独学でiOSエンジニアを目指して

#挨拶
はじめまして、現在27歳でiOSアプリケーションを独学で学習しております。
実は前職を辞め、独学でプログラミングの学習をしております。
これからプログラミングの学習を始める方々(特に社会人の方々)の一助になればと思い、本記事を投稿します。

#経歴
前職(新卒)ではSIerで約2年ほど働いておりました。
SESでお客様先に常駐し、金融系トランザクションの基幹システムの開発をしておりました。
と言っても、ほとんどが単体試験と結合試験をこなし続ける日々でしたが。。。
新卒で現場に配属されましたが、自社の先輩が1人もいないプロジェクトだったので非常に心細かったです。2年近く働いたおかげで1人でもなんとかやっていけるものだなと思えるようになりました。最終的にテストの全工程を任せてもらえたり、ほんの数行ではありますが開発をお願いされたりもしました。新卒、文系、未経験で右も左もわからない中でよくやってこれたなと個人的には頑張ったなと思っております。

特殊なシステムの操作をしていたので、スキルの寿命が短いと考え不安になったこと。
また、自分で考えたプロダクトが世に出て欲しいと考えたので自社

元記事を表示

Git環境開発リンクまとめ

#Git

Sourcetree
https://ics.media/entry/4969/
https://qiita.com/nnishimura/items/b5410e35f3a292a55244

Git
https://www.granfairs.com/blog/staff/git-mistake-parent-branch

【Mac】Sourcetreeで「Invalid username or password」が出たときの解決策


https://qiita.com/o_msyk/items/6a74623903e392ce92a3

コンフリクト
https://qiita.com/hkengo/items/f47b9f50ac2dca407d12

vi
https://qiita.com/pe-ta/items/0510bee10bcfd88afeee

元記事を表示

** is not available. please reconnect the device. 対処法

#実機テストができなくなった!
BigSurベータアップデートあたりからそういうことがちらほらあるようです。

**心配しないで。いくつかの方法を試せば、なんとかなります(たぶん)。**

+ macOSをアップデートする(ぼくこれで解決しました)。
+ Xcodeをアップデートする。
+ iOSをアップデートする。
+ デバイスとmacのペアリングを一度解除してみる。
+ プロジェクトの対応iOSバージョンを変えてみる。
+ macを再起動する。
+ シミュレーターで実行してからデバイスを試す。
+ クリーンビルドフォルダ。
+ デバイスサポートファイルをダウンロードしてみる。 https://github.com/iGhibli/iOS-DeviceSupport/blob/master/DeviceSupport/
+ ライトニングケーブルのUSBのポートを変えてみる。
+ デバイスのアプリを一回消してみる。
+ デバイスを再起動。

こういうのをやっているうちに、解決するはずです(たぶん)。

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

元記事を表示

【SwiftUI】プロパティラッパーに関する考察

#1. 目的
 SwiftUIでは、View(画面のstruct)が状態を保持しないので、プロパティラッパーを使用して状態を管理します。この記事では、複数行のテキスト(UIKitでのUITextView)を例に考察します。
#2. コードの例
 目的に関連するコードだけを抜粋しています。やりたいことは、プレースホルダー付きのUITextViewに相当するViewをSwiftUIで実装することです。
 プレースホルダーは文字の入力があったら非表示とするため、#1の_isEdited_フラグを使用します。

 この記事のポイントは、@Stateプロパティの*text*です。
 *MultiLineTextField_Rep*(子)の#2-2から、*MultiLineTextField*(親)の#2-1に入力値を渡しています。この受け渡しがない場合、#1の_isEdited_フラグが変更になって*MultiLineTextField*(親)が再描画される際、入力した値は引き継がれません(=Viewが状態を保持しないから)。
 このときのUIの動作としては、キーボードの文字をタップすると、プ

元記事を表示

RxCocoa でクラスの特定のメソッドをフックする

以前書いた ReactorKit の概要編のサンプル実装をしている際に、「`ViewWillAppear` で処理を行いたんだけど、`rx` で呼び出せないかな〜」と思っていたら、RxCocoa にはクラスの特定の関数をフックするプロパティが用意されていたのを最近知ったのでちょこっと使ってみようと思います。

### 提供されている関数

用意されている関数は下記の2つがあり、`sentMessage` がメソッドが呼ばれた時に通知され、`methodInvoked` がメソッドの処理が完了した直後に通知されます。

“`swift
rx.sentMessage(Selector)
rx.methodInvoked(Selector)
“`

### 使ってみる

`sentMessage` と `methodInvoked` を使ったサンプルコードが下記になります。

“`swift
rx.sentMessage(#selector(viewWillAppear(_:)))
.subscribe(onNext: { _ in
print(“viewW

元記事を表示

SwiftUI(TextField)のみでインクリメンタルサーチを実現する

## はじめに

SwiftUIのみを利用してインクリメンタルサーチの機能を実装する方法です。

そもそもインクリメンタルサーチとは何かという点については以下をご参照ください。
> [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%81)
> インクリメンタルサーチ(英語: incremental search)は、アプリケーションにおける検索方法のひとつ。検索したい単語をすべて入力した上で検索するのではなく、入力のたびごとに即座に候補を表示させる。逐語検索、逐次検索とも。

イメージとしては、検索機能を提供する画面などで、ユーザーが明示的にサブミットアクションを実行しなくても、入力文字列に変化があるたびに自動でデータが更新されるような挙動を実現する方法です。
ブラウザの検索窓に文字列を入力すると、サジェストや履歴が表示される挙動がこれにあたります。

## 従

元記事を表示

FirebaseへiOSアプリのdSYMを手動でアップロードする

## 概要

Firebaseのクラッシュ解析用に、iOSアプリのdSYMを手動でアップロードする手順メモ。

現在のFirebase Crashlytics SDKを使った方法です。(旧Fabric SDKは非推奨)

## 手順

### dSYMをApp Store Connectからダウンロード

対象アプリのdSYM一式をダウンロードします。

1. **App Store Connectへアクセス**
2. **Appから対象アプリを選択**
3. **アクティビティを選択**
4. **iOSビルド一覧から、対象バージョンのビルドを選択**
5. **一般情報欄の「シンボルを含む」の「dSYMをダウンロード」**

完了すると、dSYM一式が入っているappDsymsがダウンロードされます。

### アップロード用スクリプト「upload-symbols」を用意

場所は、プロジェクトのpods内、FirebaseCrashlytics以下にあります。

“`
/path/to/pods/directory/FirebaseCrashlytics/upload-sy

元記事を表示

[Swift]UIViewの一部だけを角丸にする方法

## はじめに
Viewやimageの一部だけを角丸にりする方法を説明します。
**iOS11未満だと実装方法が違うので注意**

## 実装方法
例えばViewの右側だけ角丸にする

“`swift:ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
sampleView.layer.cornerRadius = 8
sampleView.layer.maskedCorners = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner]
}
“`
![kadomaru.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592713/e637c00c-8ad0-b755-2c09-e8d6d4c2f75a.png)
maskedCornersでどの場所を角丸にするか指定しています。

## Viewの上だけを角丸にする

“`swift:ViewContr

元記事を表示

AutoLayoutのPreviewで気軽に端末差分を確認

## はじめに

UI実装ナレッジの共有です。

## Preview機能とは

StoryboardやXibファイルを実装中の複数端末レイアウトを一度に確認できる機能です。
ビルドの必要はなく、すぐに反映されます。

機能的には割と昔から提供されていたようですが、

Xcode11になってからアシスタントエディタ(名前知らなかったけど右上のタブ)の仕様が変わったので導線が変わりました。

## 使ってみる
**1.Storyboardファイルを選択肢右上のAdjustEditorOptions(三みたいな)をタップ。**

![20200726191916.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701264/43f74978-b23b-032e-f678-1bb3c09e85e2.png)

**2. 出てきたpreviewの左下の+ボタンを押下して確認したいデバイスを選択する。**

![20200726191921.png](https://qiita-image-store.

元記事を表示

iOS開発リンクまとめ

#iOS

###学習コンテンツ

日本語で勉強したいならこちら
https://www.udemy.com/share/101KI4AEMedFZaQnUJ/

英語に抵抗なければこちらが一番おすすめです
Google翻訳使えば字幕もリアルタイムで日本語表示されます
ボリュームが多いので補足的に使うのがいいと思います。
https://www.udemy.com/share/101WsaAEMedFZaQnUJ/

Storyboard xib

twitterのiOS勉強タグ
merpay_techtalk

###Objective-C

基本
http://wisdom.sakura.ne.jp/programming/objc/index.html
https://iphone-tora.sakura.ne.jp/kihon_objective-c.html
https://marycore.jp/prog/objective-c/basic-syntax/#Objec

元記事を表示

AutoLayout で表のようなレイアウトをする

## やりたいこと

こういう↓ View を組みたいとき
![capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12653/4337311a-cfec-c298-53b7-4f4a1a3d5101.png)

– table タグを使ってできるレイアウトのようなもの
– 左のラベルは右寄せ。それぞれの幅は一番幅が長いものに合わせる
– 右のラベルは複数行入る。縦方向のレイアウトはこちらで決まる

## 実現方法

この要件だと UIStackView だけだと実現できかったので、AutoLayout でゴリッとやったらできた
(Cartography と Then を使っているけど雰囲気は伝わるはず……)

“`swift
let content: [(heading: String, body: String)] = [
(“いち: “, “改行\nする\nテキスト”),
(“に: “, “普通のテキスト”),
(“さぁん: “, “長いテキスト長いテキスト長い

元記事を表示

Swift未経験でIOSアプリをリリースするまでにしたこと

# はじめに
この記事は、タイトル通りSwiftを知らない状態からIOSアプリをリリースするまでの過程を記載しています。
これから学ぶ人に少しでも役に立てたら幸いです。
文章力がないので、分かりにくかったらご指摘いただけると嬉しいです。

**著者の前提**
webエンジニア(Java)として2年半勤務。

# IOSアプリの全体像を学ぶ
プログラミング言語「Swift」を全く知らない状態だったので以下の教材で学びました。Javaと書き方が違うだけで概念は似ていたため、SwiftではJavaと違って、こう実装するのかと置き換えで学びました。

**個人的に超おすすめ**
Udemyの講座: [iOS 13 & Swift 5 – The Complete iOS App Development Bootcamp](https://www.udemy.com/course/ios-13-app-development-bootcamp)
上記の講座さえ学べばIOSアプリは何ができるのか、どのように実装するのかといった全体像を把握できます。
また、GitやXcodeの使い方、デザイン、マ

元記事を表示

【入門】iOS アプリ開発 #7【敵キャラクタの移動】

# はじめに

今回はパックマンに登場する敵キャラクタを作成する。以下が完成イメージ。
作成した GameGhost.swift ファイルは、コードが 1000行程度になり全ては説明できないため、[GitHub](https://github.com/Kikutada/0005_EnemyTest) に公開しているものを参照してほしい。

※YouTube動画
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/wqbIVGE-dBI/0.jpg)](http://www.youtube.com/watch?v=wqbIVGE-dBI)

テスト動作として、下記の仕様書にある「ノーイートタイム」を過ぎると、ゴースト(モンスター)が巣から出てきて攻撃中となるようにしている。そうでない時は休息中となる。またバッテン表示はデバッグ用としてゴーストの目標位置を示している。

# 仕様書

仕様書にはゴーストの出現タイミングや、それぞれ異なる4匹の性格仕様が記述されている。

![Image2.png](https://qiita-image-st

元記事を表示

Xcode12でUITableViewCell内のタップが反応しない・挙動がおかしい

#環境
– Xcode 12 Beta 6
– iOS 14 Beta 6

※ この記事で言及している問題は、Beta版ではなく正式版になると解決される可能性があります。あくまでBeta 6時点での解決方法としてお読みください。

#発生した問題
Xcode12でビルドしたアプリをいじっていると、UITableViewを使っている画面でタップが効かなかったり挙動が変わったりしている画面を発見しました。具体的には、cell内のUISwitchが押せなかったり、cellにaddSubviewしたUICollectionViewのcellをタップしてもdidSelectItemAtが呼ばれなかったりしました。Xcode 11でビルドしていたら押せたのに。。。

#原因
調べていくと、Cellの子ViewであるContentViewにタップを奪われてUISwitchやCollectionViewをタップできていなかったことがわかりました。storyboardやxibを使ってcellのcontentViewに乗せている場合は起こらなかったのですが、発見した箇所はすべてコード上でcellに直接

元記事を表示

【Swift、SwiftUI】実装ノウハウのリンク集(随時更新)

#1. 内容
 アプリ開発のために調べた情報の中で、今後も参照する機会が多いと思うものをストックするものです。技術的な知見を惜しげもなく公開してくださる皆様のおかげでアプリを作れています。ありがとうございます:pray:

#2. リンク集
## 公式
(1) [API Design Guidelines](https://swift.org/documentation/api-design-guidelines/)
(2) [SwiftUI Tutorials](https://developer.apple.com/tutorials/swiftui/)
(3) Apple公式
  (a) [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/)
  (b) [App Store Reviewガイドライン](https://developer.apple.com/jp/app-store/review/guideli

元記事を表示

SwiftUI独学してiosアプリをリリースした話

# まとめると

WebエンジニアがSwiftUIを独学してアプリを作ってリリースしましたという話です。
これからアプリ作ってみたいと思ってる人の参考になればと思って筆をとりました。

# 経緯と自らについて
今年(2020年)の8月の頭くらいに、アプリ作ってみようと思って重い腰を上げたWebエンジニアです。
普段は、レイルズとかジャバスクリプトとかで開発してます。(レイルズって書くとテイルズみたいですね)

# SwiftとSwiftUIの勉強方法
Xcodeて何??みたいな顔して、まずは、手始めにノリに乗ってるswiftUIとかいうものに手を出してみた。
するとどうでしょう、swiftて何?みたいになって、初めたのは下記。

・Swift Playgrounds
https://www.apple.com/jp/swift/playgrounds/
その中でも下記を全部やってみました。
・コードを学ぼう1
・コードを学ぼう2
・Bluの冒険(ほとんど真面目にといてない。さらっとふれた。)

感想としては、楽しい〜〜。
パズルでプログラミング学べるの最高か!?て思いました。
このパズ

元記事を表示

ちょこっと StackView のパフォーマンスを気にしてあげる

今回は StackView で限定された数のリストを繰り返し更新して表示する際に、ちょこっとパフォーマンスが良くなる方法を紹介したいと思います。

UITableViewCell に StackView を持っている時の実装を行っていきます。

“`swift
@IBOutlet private weak var stackView: UIStackView!

private let displayLimit = 3

override func awakeFromNib() {
super.awakeFromNib()
for _ in 1…displayLimit { stackView.addArrangedSubview(CustomeView()) }
}
“`

これで、初期化時に StackView に `CustomeView()` が3つ追加されるようになります。
次に Cell を更新するためのメソッドを書いていきます。

“`swift
@IBOutlet private weak

元記事を表示

OTHERカテゴリの最新記事