- 1. 【Swift】ゼロからのCombineフレームワーク – ユニットテストを書いてみる
- 2. PickerViewの実装までの流れ
- 3. UISliderの停止位置をInt値に固定する
- 4. [Xcode] Xcodeのディレクトリ構成と実際のプロジェクト構成の乖離を修正する
- 5. [翻訳] iOS 14 標準Webブラウザ対応
- 6. 日本人のための SwiftFormat【概要編】
- 7. 6行で UIView を UIImage に変換してサクッと画像を保存する
- 8. SwiftとFirebaseでSNSアプリNomadを開発する!(第一回)
- 9. MarketingCloudSDK iOSでシンプルなpush通知を送信する
- 10. UIDocumentPickerViewControllerで選択ファイルを絞る & iOS14からのUTType
- 11. 【Xcode】ビルドエラー「Code Signing Error: Code signing is required for product type ‘Application’ in SDK 」の対処法
- 12. 【Unity】iOSのカメラ使用時にiOS実機ビルドでクラッシュする時の対処法
- 13. Firebaseを使ったiOSのPush通知に画像を添付する Notification Service Extension
- 14. iPhoneでp5.jsがしたい
- 15. [FlutterWeb] iOS端末で画像が表示されないときのTips – webp
- 16. 【Flutter】DateTimeを「何日前」「何分前」など現在時刻との差分で表示させる方法
- 17. Create remote にて、画面を押せない対処法。
- 18. 道案内ボランティア向けのアプリ開発プロジェクト
- 19. 【iOS】ライセンス一覧を設定アプリに自動表記する方法【LicensePlist】
- 20. ChannelTalkのiOS、Androdアプリへの導入方法
【Swift】ゼロからのCombineフレームワーク – ユニットテストを書いてみる
# Combineを使ったユニットテストの方法
2つの方法を試してみました。
1. ライブラリなしでやる
2. [Entwine](https://github.com/tcldr/Entwine)というテスト補助用のライブラリを使う# テスト対象コード
`incrementCounter: PassthroughSubject`の`send`メソッドが呼ばれたら、自身の`counter: Int`に数値を加えて、`counterStr: CurrentValueSubject`を更新する単純なモデルです。
テストコードでは、`incrementCounter`の`send`メソッドの呼び出しにたいして、`counterStr`が正しく更新されていることをテストします。
“`swift:CounterViewModel.swift
import Combine
import Foundationprotocol CounterViewModelProtocol {
var incrementCounter: PassthroughSubject
PickerViewの実装までの流れ
# はじめに
pickerviewの実装について記事を書いていこうと思います。
駆け出しエンジニアということもあるのでご指摘などございましたらご教授よろしくお願いします。
(swift5.4.2)
まずPickerの実装をするまでの工程を紹介します。
1.UIPickerViewDelegate UIPickerViewDateSourceの定義と設定
2.UIPickerViewの列と行とデータ要素の数の設定
3.UIPickerViewの標示する配列の設定#ゴール地点!
![AnyConv.com__画面収録 2020-08-04 22.20.16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669384/f867e2ac-e941-1296-6274-424200681af7.gif)
#1.UIPickerViewDelegate UIPickerViewDateSourceの定義と設定について
まず
Delegateとは?
移譲や任せるなどという意味らしく、他にはデザインパターン
UISliderの停止位置をInt値に固定する
# UISliderとは
UIKitで提供されている下記のようなUIパーツです。主につまみ部分(Thumb)をTrack上でドラッグすることで値を変えることができます。公式リファレンスの絵では、画面輝度の設定を想定したものになっています。
![UISliderの構成要素(公式リファレンスより)](https://docs-assets.developer.apple.com/published/e0791617a4/14f9f16e-55c0-474a-ae62-f42ebf2cab33.png)
# 使い勝手が微妙に悪い…
標準で提供されているのですが、いくつか使い勝手が悪い点があります。
– 値がFloat型になっており、Int型を扱いずらい
– 目盛りの設置が難しい今回、この辺りを試行錯誤してみました。
# 完成版
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202533/9e9b8b39-7f44-a2de-bd45-a34cc7eaa0f0.gif)
サン
[Xcode] Xcodeのディレクトリ構成と実際のプロジェクト構成の乖離を修正する
# 概要
あんまりないケースですが実務上、Xcodeで指定のディレクトリ上でファイルを新規追加したつもりがFinderで確認すると、全然違う箇所に作成されていた・・・というケースがあり困りました :sob:
(新規作成時に表示されるウィンドウ内のFinder上でどこに配置されるかをちゃんと見れば、問題は回避できますが初期表示で出ているディレクトリが全然違う場所を指している現象がよくわかっていません・・・)
# 前提
* Xcode11.5
* Xcodeのディレクトリ構成が正
* Finder上の実際のディレクトリ構成が誤とします
Xcodeのディレクトリ構成自体が間違いの場合は以下の記事を書いた人のが参考になります↓
[【Xcode】開発途中に手動でディレクトリ構成を変更する](https://qiita.com/naipaka/items/b73ec1fe4c7b52bcb24d)Xcodeのディレクトリ構成は↓
![スクリーンショット 2020-08-05 0.56.46.png](https://qiita-image-store.s3.ap-north
[翻訳] iOS 14 標準Webブラウザ対応
[Preparing Your App to be the Default Browser or Email Client](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/preparing_your_app_to_be_the_default_browser_or_email_client) から標準Webブラウザ対応の部分を訳しました。
(2020/08/05 時点のものです)訳や解釈に問題があったら教えて下さい。
—-
## アプリを標準Webブラウザにする設定
iOS 14以降、アプリを標準Webブラウザとしての機能させるには`com.apple.developer.web-browser` managed entitlementが必要になる。これはAppleにメール( _default-browser-requests@apple.com_ )を送り、許可を得ることで使えるようになる。
### 必ず満たさな
日本人のための SwiftFormat【概要編】
## SwiftFormatとは?
SwiftFormat は MacOS または Linux で Swift コードを再フォーマットするためにコマンドラインツールです。
## なぜ使うのか?
プロジェクトをチームで行う際にコーディングスタイルを統一することで、コードの見やすさや・追いやす
さが向上しますが、これらを認識のあっていないチームで行うとコードのフォーマットの違いを指摘・修正
を手動でオペレーションすることにコストがかかります。これらの作業を SwiftFormat で自動化するこ
とで開発者はコードの動作に集中できるようになります。## どうやって使うのか?
現在は下記の4通りの方法があるみたいです。
1. コマンドラインツールとして手動で実行するか他のツールチェインの一部として使用する
2. Source Editor Extension として Xcode の [Editor] > [SwiftFormat] メニューから呼び出す
3. Xcode プロジェクトのビルドフェーズ(Run Script?)として、`Cmd-R` or `Cmd-B`を押す
6行で UIView を UIImage に変換してサクッと画像を保存する
# はじめに
今回は特定の View を UIImage に変換してフォトライブラリーに保存できるようにします
# 実装
### プロパティを追加
UIView から image を取得するための ExtensionProperty を追加します。
“`swift
extension UIView {
var image: UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0)
let context: CGContext = UIGraphicsGetCurrentContext()!
layer.render(in: context)
let capturedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return capturedImage
SwiftとFirebaseでSNSアプリNomadを開発する!(第一回)
#対象者
– プログラミング初心者の方
– SNSアプリの開発に興味のある方
– エンジニアを目指している方#簡単な自己紹介
プログラミングは1年ほど学んでおり、特にSwiftを扱ってきました。
それまでは、プログラミングの存在自体は知っていましたが、たまにHTMLやCSS、WordPressをかじる程度で本格的に勉強してはいませんでした。
そんな自分がiOSアプリを開発し、リリースしたので、開発過程のノウハウを共有していこうと思います。#アプリ紹介
[『**Nomad**』](https://apps.apple.com/jp/app/id1521126400)
このアプリは、ニュース、音楽、スポーツ、漫画、、、などカテゴリ
MarketingCloudSDK iOSでシンプルなpush通知を送信する
#環境
・xcode Version 11.3.1 (11C504)
・swift Version 5.1.3
・MarketingCloudSDK iOS (v7.2.1)
・Mac OS 10.14.6(Mojave)
#準備
・APNs用証明書(.p12)
・認証キー(.p8)
※2020/08/04段階では両方取得する必要がある。(多分そのうち.p8認証キーだけでいけるっぽい)
参考リンク
.p12
https://qiita.com/natsumo/items/d5cc1d0be427ca3af1cb
.p8
https://docs.repro.io/ja/dev/sdk/push-notification/setup-ios.html#app-id
#SMCのMobilePushでアプリを作成する
1. mobilePushを選択する![スクリーンショット 2020-08-04 13.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246356/cbcfda00-c113-
UIDocumentPickerViewControllerで選択ファイルを絞る & iOS14からのUTType
# ユーザーの選択ファイルを限定したい
最近のプロジェクトで端末内の.m4a, .mp3ファイルだけ選択させたい用件があったのでUIDocumentPickerViewControllerでdocumentTypesを指定して実装しました。
その時に__MobileCoreService__の定数を使って処理していたのですが、非推奨の扱いになっていたので合わせて__iOS14以降のUTType__について調べました。
ちなみに非推奨の実装でベータのiOS14のシュミレータで実行してみましたが、ワーニングが出るだけで動作はしていました。
## iOS13までの実装
Xcode 11.5(11E608c)
“`swift
import UIKit
// 1. MobileCoreServicesをインポート
import MobileCoreServicesclass FileSearchViewController: UIViewController {
// ~~~ 省略 ~~~
private func showFilePicker()
【Xcode】ビルドエラー「Code Signing Error: Code signing is required for product type ‘Application’ in SDK 」の対処法
Unityで書き出したXcodeプロジェクトを実機ビルドした際に、以下のエラーで失敗してしまったため、その対処法備忘録です。
>Code Signing Error: Code signing is required for product type ‘Application’ in SDK ‘iOS 13.6’
## Development Teamが空になっていた
Xcodeの**Development Teamが空になっていたのが原因**でした。
適切にTeamを設定してあげるとビルドは成功しました。## Unity側で予め設定しておく
もう1つの解決方法としてUnity側でTeamIDを設定しておく方法です。
【Unity】iOSのカメラ使用時にiOS実機ビルドでクラッシュする時の対処法
UnityでiOSのカメラを使う際は、WebCamTextureクラスを使います。
以下のショートコードでプラットフォームを越えてカメラ情報を取得することが出来るので本当にUnityは便利です。“`WebCamTest.cs
[SerializeField] RawImage _rawImage;
void Start()
{
var webCamTexture = new WebCamTexture();
_rawImage.texture = webCamTexture;
webCamTexture.Play();
}
“`UnityEditor上で実行する上では問題なく動くと思います。
しかし、XcodeでiOS端末で実行すると、Xcodeのコンソールで以下のエラーを吐いて落ちる時があります。本記事はその対処法備忘録です。
>[access] This app has crashed because it attempted to access privacy-sensitive data without a usage descrip
Firebaseを使ったiOSのPush通知に画像を添付する Notification Service Extension
iOSではPush通知に画像を添付するために一手間かけないといけません。
それがNotification Service Extensionの導入です。Firebaseを使いましたが、もちろんFirebaseを使わないPush通知にも応用可能なので、是非参考にしていただければと思います。
#導入
###Xcodeでの準備1. XcodeでProjectを開く
2. メニューバーのFile->New->Targetを選択
3. Notification Service Extensionを選択
iPhoneでp5.jsがしたいProcessingを書くためのappです。この記事のお題はこのappを入れれば解決なんですが、日頃[Pythonista3](https://apps.apple.com/jp/app/pythonista-3/id1085978097)を使っている身には書きにくかったので、別の方法を探しました。
# 必要なもの
次の条件を満たすコードエディタappが必要です。
* ファイル、ディレクトリ管理ができる
* HTMLのプレビューができる筆者のお勧めは[Textastic](https://apps.apple.com/jp/app/textastic-code-editor-9/id1049254261)です。コンソールを見ることもできるためです。Pythoni
[FlutterWeb] iOS端末で画像が表示されないときのTips – webp
# iOS端末でFlutterWeb上の画像が表示されない
僕は今までAndroidのアプリを開発していたのですが、愛するGoogleがFlutterを推しているので、この機会にiOS・Webアプリ開発に触れてみようとFlutterでWebアプリ開発を試みた時に起こった事象です。今回の事象について最初は画像表示方法が間違っていると思い少し悩んだのですが、結論としてはもっとシンプルな話でした。恐らくiOS開発に慣れている人は陥らないエラーかと思うのですが、僕と同じAndroid出身のために残します。
## 結論
Googleが生み出した便利な画像フォーマット「webp」をiOSはサポートしてない。
つまりFlutterでは対応していてもiOSでは表示できない。
https://github.com/fluttercandies/flutter_image_editor/issues/42### ※2020/06/23時点で改善の兆し有り
iOSでもwebpを対応していくようなので、この問題は短期的なもので終わる可能性がある。嬉しい。
2020/06/23時点 Safari 14
【Flutter】DateTimeを「何日前」「何分前」など現在時刻との差分で表示させる方法
今回は、flutterで、「何日前」、「何分前」など現在時刻からの差分で表示していきます。
# 現在時刻より「〜日前」「〜分前」の時間をとって来きて画面に表示する
ソースコード
“`dart:main.dart
// 現在の時刻
final DateTime now = DateTime.now();class Date extends StatelessWidget {
// 30秒前の時刻
final DateTime thirtySecondsAgo = now.add(Duration(seconds: 30) * -1);
// 30分前の時刻
final DateTime thirtyMinutesAgo = now.add(Duration(minutes: 30) * -1);
// 5時間前の時刻
final DateTime fiveHoursAgo = now.add(Duration(hours: 30) * -1);
// 30日前の時刻
final DateTime thirtyDaysAgo = now.ad
Create remote にて、画面を押せない対処法。
## Githubのリポジトリ作成で、コケた箇所。
先程、Githubに初pushできた㊗︎。
ちょっと顛末をまとめます。## 結論
Create remote on Githubでcreateが押せなかった。
下は、create操作可能になってからのスクリーンショット。
解決策は、こちら。[**XcodeのCreate remote on Githubでcreateが押せない**](https://qiita.com/kokoheia/items/7b73a8b2db56ff53c0cf)補足をちょっとまとめます。
?pushまでの基本手順はこちら。[**XcodeとGitHubの連携方法**](https://qiita.com/ynack/items/7c9aa83790ba03c34598) (※1)
#1 はじめに
みなさんはじめまして。塚原卜伝と申します。仕事ではC,C++,pythonを扱っています。
仕事の合間に外国人道案内ボランティア団体であるask me!での活動に参加しています。
ask me! HP : https://askme.ne.jp/
Twitter : https://twitter.com/askmeJAPAN
Facebook : https://www.facebook.com/weareaskme
Instagram :https://www.instagram.com/we.are.askme/?hl=ja2020年の3月にask me!での活動の効率化のためにAndroid&iOSアプリ(ask me! app)をリリースしました。
今回初めての個人開発で大変な所も多かったですが、楽しい所もありました。
今回は自分がどのように「ask me! app」を作っていったのかをまとめたいと思います。
#2 ask me!の活動紹介
ask me! appはask me!での活動がベースになって作られたものなので
【iOS】ライセンス一覧を設定アプリに自動表記する方法【LicensePlist】
今回はアプリ内で利用したライブラリのライセンス一覧を、簡単に設定アプリに表記する方法を紹介します。
ライブラリを新しく追加しても更新されるのでとても便利です。![スクリーンショット 2020-08-03 8.39.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549845/d2e35030-4725-8ec4-75b7-9b6356262f7e.png)
# LicensePlistというライブラリを活用する
ライセンス一覧を手軽に表記することができる、かなりオススメのライブラリです。
有名なアプリでも結構使われているみたいです、開発者の方いつもお世話になっています!https://github.com/mono0926/LicensePlist
##①インストール
Cocoapodsを使いました。`pod ‘LicensePlist’`とPodfileに入れてinstallします。
##②Run Scriptを編集
Xcodeの Build Phases のRun Scrip
ChannelTalkのiOS、Androdアプリへの導入方法
# MAMORIOにおけるチャットツールの利用とChannelTalkへの移行
落とし物防止タグのMAMORIOはIoTタグとアプリを連携させる複雑さの問題からユーザーからの問い合わせが多く、2018年頃からサポートの体験の質を向上させるためにIntercomというチャットツールを導入していた。
しかし、米国製で主に欧米や中南米諸国をマーケットとしているIntercomは基本的に英語話者向けで管理コンソールもIntercom社員とのやりとりも英語であり、また(便利そうな)自然言語処理を用いたチャットボット機能も一向に日本語対応する気配がなかったため、韓国製でBotやマーケティング機能のコストが安く、かつ日本語圏を優先してくれるChannelTalkへ移行したところ**オペレーターによるサポート負荷を半減させることに成功した**。
以下は弊社オペレーターが書いた記事: https://note.com/tanakosan0508/n/n99af82341ba0
# 導入方法
導入ガイド: https://developers.channel.io/docs
SDKを使用するに