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

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

bazelのiosチュートリアルの修正点

チュートリアルの左上にあるボタンからmasterに切り替えればよかった

ーーーーー

基本的にはこの手順で良い
https://docs.bazel.build/versions/2.0.0/tutorial/ios-app.html

ただ、依存ライブラリが古いまま(2020/1/3現在)なので若干記法などが異なる。
チュートリアルの中で出てくるWORKSPACEとBUILDを次のように変更すればとりあえずビルドまでは行ける。

“`bazel:WORKSPACE
workspace(name = “tutorial”)

load(“@bazel_tools//tools/build_defs/repo:http.bzl”, “http_archive”)
http_archive(
name = “bazel_skylib”,
urls = [
“https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skyli

元記事を表示

GoFデザインパターンをSwiftyに書く

# あけましておめでとうございます
年末年始休みで雪国のど田舎に帰省してゆっくりしてますが、~~コタツの中であまりに暇なので~~腰を据えて設計について考えるいい機会だなと思い、このテーマを選びました。

# この記事で伝えたいこと
GoF(ゴフ)デザインパターンとは、the Gang of Fourと呼ばれる4人の開発者によって整理された、オブジェクト指向にもとづいた23個のプログラムのパターンのことです。
この記事では、その23個のパターンの中でもよく使いそうなものについてはサンプルコードをつけて紹介してます。その他のパターンは概要の説明にとどめてます。サンプルではできるだけ身近な例を使っているので、GoFデザインパターンにおける「オブジェクトの役割分担」と「プロトコルや構造体なども使ったSwiftらしい実装」のイメージをサクッとつかむ手助けになればこの記事は成功かなと思ってます。
ちなみに、概要説明で頻繁に出てくる「オブジェクト」という表現はSwiftのクラスや構造体などを指しています。

# 目次
– 振る舞いに関するパターン
– [Chain of Responsibi

元記事を表示

[Swift 5] swiftでラジオボタン実装

タイトルの通りです。

縦に配置したいこともあり(あとは見栄え的な問題で)、UISegmentedControlを用いずにラジオボタンを実装したかったのですが、調べても記事が古かったり、初心者の自分には手をつけがたい手法が多かったので、自分が理解できる手法で実装しました。
また、今回のコードでは、ボタンの数が可変的でも対応できるようにしています。

### バージョン
xcode: 11.2.1
swift: 5.1.2
### 準備
ボタンの画像を用意してAdd Fileからプロジェクトに追加します。
チェックボックスのフリー素材は探せばありますが、枠だけの方がないことが多かったので、自分はMac標準のプレビューで描きました。

スクリーンショット 2020-01-02 3.20.42.png

### 実装

元記事を表示

[iOS]Viewの一辺(片側)に点線を引く

参考までに

“`swift

///利用側
func _() {
hogeView.addOneSideDashBorder(position: .bottom, color: .red, lineDashPattern: [5, 5])
}

extension UIView {
/// 一辺に点線を引く
@discardableResult
func addOneSideDashBorder(position: BorderPosition, color: UIColor, lineDashPattern: [NSNumber]?) -> CALayer {
layoutIfNeeded()

let shapeLayer = CAShapeLayer()
shapeLayer.lineDashPattern = lineDashPattern
shapeLayer.strokeColor = color.cgColor
shapeLayer.frame = boun

元記事を表示

【Swift】インスタンスの生成と利用の分離、Composition Rootという考えについて

# はじめに
文章の中で「クラス」という言葉を用いていますが
これはSwiftの`class`だけを指しているのではなく
`struct`や`enum`なども全て含めてクラスと呼称しています。

アプリを開発をしていると

– 必要な機能をクラスに分けて開発する
– さらにモジュールに分けて開発する
– プロジェクトを超えて共通で利用できるモジュールを利用する

など
を行うことがあるかと思います。

そうすると
あるクラスの中で他のクラスを利用することがあるかと思いますが
どこで利用するクラスを生成するかが
問題になることがあります。

例えば
Aクラスの中で利用するBクラスのインスタンスを生成しているとします。

仮にBクラスのインスタンス生成時に
新しくCクラスを引数に渡す必要が出てきた場合
本来Aクラスでは必要のないCクラスのインスタンスの生成も行うことになります。

もしこの新しく追加したCクラスのインスタンス生成方法に変更があった場合
Aクラスには全く必要のないCクラスに依存していることによって
Aクラスが変更しなければならないという事態に陥ってしまいます。

元記事を表示

CustomCellにsegueを設定する

備忘録。

#①CustomCellを作成する
![スクリーンショット 2019-12-31 11.15.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533606/5f412f93-c5c7-44ce-c17e-7b8e8e263401.png)
![スクリーンショット 2019-12-31 11.15.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533606/02b0c820-ffe3-068f-413e-fd32c919ff2e.png)
![スクリーンショット 2019-12-31 11.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533606/7cc91bac-7854-ea78-365c-8fac97515c74.png)
![スクリーンショット 2019-12-31 11.16.40.png](h

元記事を表示

Sandboxユーザーの作成数の上限について

## 背景

iOSの課金環境のテストをする上でSandboxユーザーが必要となりますが、Sandboxユーザーを自動作成したほうが効率が良いケースがあります。
自動作成するにあたりむやみに作り続けるのは良くない+ドキュメントに記載がなかったこともあり、Sandboxユーザーの上限数を調べるために以下の確認をしました。

## サンプルコード
手始めに2500件のSandboxユーザーを作成します。
fastlaneのSpaceshipを使うことでSandboxユーザーの作成が簡単に行えるので、以下のようなコードで確認しました。

“`rb
# Fastfile

default_platform(:ios)
require ‘spaceship’

platform :ios do
lane :create_sandbox_users do
Spaceship::Tunes.login(ENV[“SPACESHIP_USERNAME”], ENV[“SPACESHIP_PASSWORD”])

for i in 1..2500
email

元記事を表示

SourcegraphでiPad上のコードリーディング環境を整える

# はじめに

[Sourcegraph](https://sourcegraph.com/)はブラウザ上でGitリポジトリ上のソースコードを検索・分析できるツールです。
このツールを使うとGitHub上のパブリックリポジトリに対して簡単にコードリーディングを行う環境を準備することができます。

# 前提
* 本記事では、Sourcegraphの使い方は説明しません。
* GitHub上のパブリックリポジトリを対象とします。
* プライベートリポジトリを対象とする場合は、自前のサーバにオープンソースのSourcegraphをインストールする必要があるかもしれません。
* こちらについては詳しくは調べていません。
* iPad環境を想定します。
* iPhoneでも大丈夫だと思いますが、画面が小さいため個人的にコードリーディングには適さない気がします。
* また、Apple Pencilを使うとコードリーディングと相性が良さそうです。
* PC上でコードリーディングする場合は、[Chrome拡張](https://chrome.google

元記事を表示

iOS プッシュ通知に必要な証明書 p12とp8に関する疑問解消 (Firebase Cloud Messaging)

#はじめに
iOSでプッシュ通知の実装するには、色々は選択肢がある。

今回はそのうちの1つ、**Firebase Cloud Messagingを使う場合に必要な証明書に関する疑問を解消したい。**

#疑問って何?
そもそも**「p12とp8に関する疑問解消」**ってどゆこと?って事だが、、
以下の記事を見比べて欲しい。

[プッシュ通知に必要な証明書の作り方2019](https://qiita.com/natsumo/items/d5cc1d0be427ca3af1cb)

[iOSにおけるFirebase Cloud Messagingによるプッシュ通知の実装方法](https://qiita.com/rockname/items/4a092e39e571ddd19c5b)

上の記事では、**2つとも「iOS プッシュ通知に必要な証明書」**を取得する方法が紹介されている。

しかし!!!そこには大きな違いがある!!

###上の記事ではp12タイプの証明書、下の記事ではp8タイプの証明書
を取得しているのだ。

#Firebase Cloud Messagingではp8を

元記事を表示

Unity-iOSとマイコンをBLE通信させようとして詰まった話

#環境
Unity2018.4.14f(Personal), ESP-WROOM-32, iOS13.3

#経緯
###目的
 [UnityのBLEアセット](https://assetstore.unity.com/packages/tools/network/bluetooth-le-for-ios-tvos-and-android-26661)を購入したので、せっかくESP32もあるし、同梱しているStartingExampleなるサンプルを試してみたかった。
###問題
 サンプルコードを書き、iOS向けにビルドしてみたが、クラッシュしてしまって起動しない。
 macと繋いでエラーを見ても、Thread x:signal SIGABRTと出てエラー個所が全くわからない。

#解決
 しばらくコードと格闘してみたが、当方iOSの知識が全くないので、観念して公式サポートに問い合わせてみた。
 すると、「Bluetooth always usage descriptionが必要だよ!ggれば簡単に見つかるから試してみて!」と返信があったので、早速試してみた結果、普通に解決した。
#

元記事を表示

Github ActionsでiOSアプリのデプロイを自動化する

元ラーメン屋店長プログラマのObjective-ひろC([@hirothings](https://twitter.com/hirothings))です?
GitHub Actionsで[個人アプリ](https://apps.apple.com/jp/app/id1460380962)のデプロイを自動化したのでその手順を書きます。

目次

1. GitHub Actionsとは?
2. なぜGitHub Actionsをデプロイ環境に選んだか?
2. 実装の流れ

## GitHub Actionsとは?
「GitHub上で動作するサーバレス実行環境」で、GitHub関連のイベントをトリガーにCI/CD様々な処理を実行できます。
[中の人がGitHubの概要について説明しているわかりやすい記事](https://codezine.jp/article/detail/11450)があるので、それを読むのがオススメです。
以下、抜粋。

>
* Actionの実体はDockerコンテナ
* Actionを組み合わせて独自のワークフローを構築できる
* コンテナ実行環境がコンパクトで重い

元記事を表示

【Human Interface Guidelines】Modality機能 和訳

モバイルアプリを設計する上で、モーダルウィンドウ機能についてiOSの推奨を理解しましょう。
「[Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/modality/)」のModalityの章について紹介します。
モバイルアプリは、ユーザーの実現したい目的のために画面が遷移していくことが基本です。
(AppStoreでは特定のアプリ詳細ページに遷移して、アプリをインストールする目的のためなど)
しかしユーザーにメッセージを伝えるために、一時的にユーザーストーリー(想定する画面遷移)から離脱したい場合があります。
その際に、ユーザーに不快感を与えることなく、実装することが求められます。

## 前提

モーダルウィンドウ機能は、ユーザーの現在開いているコンテンツとは独立しており、一時的に表示するためのデザイン手法です。
そのため、モーダルウィンドウを閉じるための明示的なアクションが必要となります。
コンテンツをモーダル

元記事を表示

【iOS】Swiftファイルのヘッダーコメントをカスタマイズする

#概要
iOSの開発をする際にXcodeでファイルを追加すると、ファイルのヘッダーに以下のようなコメントが入るかと思います。

“`swift:Sample.swift
//
// Sample.swift
// SampleProject
//
// Created by ~~~ on 2020/12/30
// Copyright © 2020 ~~~. All rights reserved.
//
“`

複数人で開発をする際に、上記コメントを合わせたかったので、コメントをカスタマイズする方法についてまとめてみました。

#環境
Xcode: 11.2.1
Swift: Swift5

#手順1
「IDETemplateMacros.plist」を生成します。
(生成したファイルの配置場所は手順3で説明します)

#手順2
手順1で生成したファイルに以下を追加します。
(サンプルでは作成者・作成元を非表示としました)

“`xml:IDETemplateMacros.plist

元記事を表示

初心者のためのswift、Xcodeで画面遷移をする方法(アウトプット& 復習用) 

今回はxcodeでの画面遷移についてです
この情報はよく出回っていることだと思いますが、自分なりに書きました!
「なんで遷移するのか?」や、「なんでこのコード必要なの?」、などの説明は
この記事で説明しておりません!
画面遷移方法の一つを紹介する記事となっています!

Modalによる遷移

まずは最初にMainStorybordに遷移先のViewcontrollerをおきます!
(右上の十字マークのところから持ってきます)

次にcommand + N を押してCocoa Touch Classを選択します
スクリーンショット 2019-12-29 20.36.28.png

その次に遷移先のviewcontolloer.swiftの名前を変更します。
私は適当に次の遷移先なのでNextView

元記事を表示

アダプターをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Adapter(アダプター)

####0. アダプターの意義

レガシーコード(古いコード)や、他者製のコード(外部ライブラリなど)を使う際、自分の書いたコードと実装形式などが違う事がある。そういったコードを用いる際、いちいち自分のコードと適合する形に直さなければならないとすると非常に手間がかかる。

アダプターパターンはそういったコードを自分のコードから扱いやすい形に修正してくれるデザインパターンである。

元のコードがどういった実装をしていたか? などをいちいち意識する事なく自分のコードに適合させられるため、時間と労力の節約につながる。

注意点としては、外部のコード等がもともと期待する機能を持っていないのにアダプターパターンを使って無理に他のコードと統合しようとしてはいけないという事である。それはアダプターの能力を超えている。そういったケースは単純に外部のコードの選定ミスな

元記事を表示

【Carthage】failed with exit code 128: fatal: could not read Username for ‘https://github.com’: terminal prompts disabled

# 概要
Carthageでレポジトリを指定して、

“`shell
carthage update –platform ios
“`

を実行すると

“`shell
A shell task (/usr/bin/env git fetch –prune –quiet https://github.com/Qiuck/Nimble.git refs/tags/*:refs/tags/* +refs/heads/*:refs/heads/*
(launched in /Users/[user_name]/Library/Caches/org.carthage.CarthageKit/dependencies/Nimble)) failed with exit code 128:
fatal: could not read Username for ‘https://github.com’: terminal prompts disabled
“`

というエラーが出た。

# 解決策

解決策ってほどのものでもなく、 **Cartfileのレポジトリ名がtypoってた*

元記事を表示

[はじめてのiOSアプリ]xcodeで地図アプリを作成(その8)

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の8回目です。

今回は、地名の取得と表示(Reverse Geocoding)までします。

# 位置情報から地名に変換するサービス
– 今回使うのは [Finds.jp](https://www.finds.jp/rgeocode/)
– 【なぜ?】
– 利用する準備が簡単(登録不要で利用可能)
– やっぱり「やってみました」は簡単にやってみることができるのは重要!
– 今回は、日本国内の地名に変換できれば十分だから
– キーワード「reverse geocoding」で検索してみると、いろいろ見つかる
– 気になる人は、いろいろ試してみると良いですよ

## 簡単な Finds.jp の使い方
– ブラウザで以下のアドレスを表示してみる
– [https://www.finds.jp/ws/rgeocode.php?lat=35.6804725&lon=139.

元記事を表示

【Human Interface Guidelines】Loading機能 和訳

モバイルアプリを設計する上で、ローディング(読込み)機能についてiOSの推奨を理解しましょう。
「[Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/loading/)」のLoadingの章について紹介します。
モバイルのアクション処理では、機械学習を用いた高負荷な演算処理や、大容量データの取り扱いなど、
ユーザーに不快感を与えることなく、実装することが求められます。

## 前提
コンテンツの読込み中に、空白または静的な画面が表示されていると、アプリがフリーズしているように見えます。
ユーザーや混乱とフラストレーションが生じ、アプリから離脱してしまう可能が高まります。
![iPhone-Loading.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/c5929440-e98d-59c7-866c-a5e3290131e6

元記事を表示

iPodをwebサーバとして使う

#はじめに
初めてまして
初投稿です!
今回はiPodでApacheを動かす方法について書きたいと思います(需要…)

#環境
iPod touch (6th generation)
ios 12.4.4

#iSHをインストール
まず「[TestFlight](https://apps.apple.com/jp/app/testflight/id899247664?ign-mpt=uo%3D4)」をインストールします.
次に[公式サイト](https://ish.app/)のJoin the TestFlight beta!のTestFlight betaをクリックしてiSHをインストールできます.

#Apache2の導入
iSHを起動したら
“`apk add apache2“`
を実行するとApache2がインストールされます.
Apache2の設定ファイルは
“`/etc/apache2/httpd.conf“`
ルールディレクトリは私の環境では
“`/var/www/localhost/htdocs“`
でした.
次に
“`httpd -D UNDERGR

元記事を表示

脱獄検知回避アプリを解析する Liberty lite


typora-copy-images-to: ipic

執筆途中

本記事では脱獄についての説明は省きます。

## 脱獄者 vs 開発者

今まで脱獄者は開発者にとって無視できない不都合な事象(アプリケーションの解析やチート、海賊版の作成 etc…)をもたらしてきました。これらの行為を防ぐべく、多くの開発者は__脱獄を検知__してアプリケーションの挙動を変えることで対策しました。

脱獄者の中には少なからず_開発者_や_セキュリティリサーチャー_といった類の「職」を持つ人々がいます。そしてこれらの人々の一部(野心的なデベロッパー・ハッカー)にとって脱獄検知という技術は非常に興味深いものであることに間違いありません。彼らもまた、__脱獄検知を回避__するという手段を通じて開発者に対抗しました。

__これは終わらないイタチごっこに違いありません!__

実際、今まで_Cydia_をはじめとした脱獄アプリストアには多くの__脱獄検知回避Tweak__が並んできました。

_Xcon, BreakThrough, FLEX, Liberty, Lib

元記事を表示

OTHERカテゴリの最新記事