サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
qiita.com/codelynx
何が問題なの? 普段あまり、AWSやFIREBASEなどのサービスの利用を何とか避けてニッチなアプリで凌いでいましたが、ついにそんな悠長な事も言って入れなくなってきました。 改めて、この種のサービスを利用する際に常に気になっていたのが、こんな記法です。SDKがこれらの情報を必要とするのは理解できますが、これらの情報をリテラルで渡すのはかなり気になります。スクリプトなどを介在して環境変数から、これらの情報を渡す場合もあるようですが、コンパイル時にはリテラルになっているのでやはり気になります。 例えば、ターゲットとなるアプリがあったとします。WorldGreatServiceを利用しているのがわかっているものとします。そして、WorldGreatServiceがSDKを公開していたとします。 自分でも同SDKを組み込んでみるとします。自分用のapi-keyとsecret-keyを取得して上記同
はじめに 最近 iOSでアプリ内課金で自動更新のサプスクリプションをの実装を行いました。その時に、Web でどうやってレシートの検証を行うかを検索しました。 • レシート検証 プログラミングガイド(PDF) • レシート検証 プログラミングガイド(Web) • In App Purchaseのレシートをローカルで検証できるようになった話(Qiita) • iOSの月額課金レシート検証をサーバーサイドで行うときのTipsまとめ(Qiita) • iOS In-App Purchase実装で必ず知っておきたい隠れた罠(Qiita) • Apple App Store Receipt Validation with Swift and Go • Local Receipt Validation for iOS in Swift From Start to Finish • Validating
macOS のアプリのコードでネットからのコンテンツがダウンロードされない!? macOS の cocoaアプリの新規プロジェクトを作り、こんなコードを書いたら動かない事に気がつきました。 do { let url = URL(string: "https://www.apple.com")! var encoding = String.Encoding.utf8 let text = try String(contentsOf: url, usedEncoding: &encoding) print("contents: \(text)") } catch { print("error: \(error)") } dnssd_clientstub ConnectToServer: connect()-> No of tries: 1 dnssd_clientstub ConnectToS
今回は、UIBezierPath をコードで計算して表示する方法を紹介したいと思います。現実的には iOS や macOS であれば、UIBezierPath なり NSBezierPath を生成して、stroke() するだけでいいのですが、どうやってその座標を計算しているか気になる型は参考にしてください。 Bezier Path は以下のような ベジエ曲線または直線を組み合わせたものです。下図の P0から P3の間に、コントロールポイントと呼ばれる P1、P2 を設け滑らかに曲線を描きます。 計算のイメージは言葉で説明するより図になっている方がわかりやすいと思うので、GIF アニメーションを引用します。 https://upload.wikimedia.org/wikipedia/commons/d/db/Bézier_3_big.gif これを swift で計算してみる事にしまし
iOS と Mac でできるだけ多くの共用したコードを使えるようにするために。こんなコードをよく使っています。 #if os(iOS) import UIKit typealias XView = UIView typealias XImage = UIImage typealias XColor = UIColor typealias XBezierPath = UIBezierPath typealias XScrollView = UIScrollView typealias XViewController = UIViewController #elseif os(macOS) import Cocoa typealias XView = NSView typealias XImage = NSImage typealias XColor = NSColor typealias X
Alamofire.request(.GET, "https://domain.com/contents") .responseJSON { response in // your code here!! } let configuration = URLSessionConfiguration.default let session = URLSession(configuration: configuration) let url = URL(string: "https://domain.com/contents")! let task = session.dataTask(with: url) { (data, response, error) in if let data = data, let json = try? JSONSerialization.jsonObject(w
前回こんな記事を書きました。 Swift 世代の排他制御 http://qiita.com/codelynx/items/0ecd28c8a7da0a0e42b5 この記事では、以下のような排他制御の書き方を紹介しました。NSLock を使えば、複数のスレッドからクリティカルなデータの同時更新を防げるという話でした。具体的には、NSLock を lock() してから unlock() するまでは、他のスレッドは待たされるので、atomicity が保証できるという話です。しかも、defer 文を使えば、スコープを抜けた時に、確実に実行されるので、途中でいくつもの return 文があるようなパターンでも、実行し忘れがなく、安全という事です。 class MyObject { let lock = NSLock() func update1() { self.lock.lock() def
Swift 2.2 から Swift 3.0 に自動変換した場合に、うまくいった場合と手動で直さなければいけなかった場合のまとめ。自分のプロジェクト内で、実際に発生した内容をメモにのしていたものです。生々しい名前は編集してあります。また、メモを取る時に操作ミスなどが混在している場合もあるので、ご留意くださいませ。 2017.12 加筆† Foundation // before private let _gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
Swift に限った話ではありませんが、クラス名や変数名に Unicode が使えるようになってきました。🐶や🐱を変数にするのも結構ですが、もっと日本語を積極的に使っていけば、開発や保守が楽になるケースがあると考えていました。今回、日本語を積極的使って Swift でプログラミングする話をしたいと思います。 そもそも何に日本語を使うの? 以下に何に日本語が使えそうかを示します。 変数名 定数名(不変変数名) クラス名、タイプ名、列挙子名 コメント 関数名、メソッド名 名前に日本語を使うとどこがいいのか? 1. 専門用語が明確になる 例えば、以下のような用語の機能を実装する必要があったとします。みなさんならどんな風にコーディングしますか?ちゃんと英訳して、名前をつけますか? 確定申告 月末締め翌々月10日入金 瑕疵担保責任 無担保コール翌日物 そもそも、その英語の名前、英語圏の人が見て、
zip をオンメモリで解凍 iOS や OS X のアプリでサーバーよりコンテンツをダウンロードしてデバイスで利用する場合など、やはり zip した内容を解凍して利用するケースは少ないくないと思います。パフォーマンスを上げるためにオンメモリで解凍したい場合もあるかと思います。今回は、そんな場合の為にオンメモリで解凍可能な ZUnzip を紹介いたします。 ZUnzip ZUnzip は https://github.com/codelynx/ZUnzip から取得できます。 ZUnzip の初期化 ZUnzip はzipファイルのパスを渡すもしくは、zipファイルのデータを渡して初期化します。
アプリを横断して同じコードやViewにViewControllerクラスを使いまわしたい時は時折あると思います。旧来は ソースそのものを使いまわしたり、static library を作って使いまわしていた事と思いますが、Swift時代では、そもそも Swift のコードは static library が作れなかったり、ViewController だけでなく、.xib (.nib) や storyboard を使いまわそうとすると、static library では無理があります。 iOS8 からは Framework が使えるようになりました。Frameworkはコードだけでなく、storyboard や画像などのリソースを含める事が出来。そして Header ファイルを含める事ができるので、使い回す側のクライアントサイドへ class 名や API を引き渡す事が出来ます。 OS
Update: 関連する記事のリンクを追加しました。 Swift 3 世代の排他制御 http://qiita.com/codelynx/items/56ce2f91cd3f4f409aeb 今回は Swift で排他制御が必要になった時の TIPS を紹介したいと思います。 Objective-C時代の古き良き排他制御 GCDを使った排他制御 NSLock と defer を使った排他制御 Objective-C時代の古き良き排他制御 Objective-C の時代に排他制御のコードを書いた人は @synchronized をよく使ったと思います。簡単な構文で手軽に排他制御できていたので重宝していたかと思います。 // Objective-C 時代の排他制御 - (NSData *)readDataRange:(NSRange)range { @synchronized(self) {
問題点の整理 UIView のサブクラスを書いている時などで初期化の為に一回だけ処理したい場合があったとします。例えば、UIViewController を使うときは、 viewDidLoad() に色々な初期化の為のコードをかけば、view が生成されてから一度しか呼ばれません。よって、UIViewController を使っている場合には、ここで、Gesture Recognizer を生成登録したり、複雑なサブビューをコードで生成したりする場合は非常に便利です。 class MyViewController: UIViewController { func viewDidLoad() { super.viewDidLoad() // さまざまな初期化のコード } } ところが、さまざまな大人の事情により、これらと同等なコードを UIView のサブクラスに持ってくる場合には、どうすれ
将棋盤Kit Swift 3.0 に対応しました。記事内の説明は一部 2.2 の場合があります。追ってアップデートしたいと思います。 日本の将棋はルールが複雑でプログラミングには大変扱いにくい課題の一つだと思います。Swiftの登場で、複雑難解な課題のコード化もきっと書きやすくなるだろうと思い、本将棋の基本的なルールや挙動を実装するフレームワーク「将棋盤Kit」を開発してみましたので紹介したいと思います。 まず、最初にはっきりさせておきたいのですが、将棋盤Kitは以下の事を目指してはいません。 * グラフィカルなユーザーインターフェースを提供する * 人工知能の実装 しかし、将棋盤Kit はそんなグラフィカルなユーザーインターフェースの実現や棋譜の研究さらに将棋の思考エンジンを実装しようと考えた場合に、便利となる基本的なルールの実装を目的としています。全く個人的なSwiftの技術探求との噂
C言語スタイル for ループの廃止 C言語スタイルの for ループが Swift 3.0 で廃止される見込みの為(エラーメッセージには将来のみたいな表現だけど)、これまでこのスタイルで書いてきた for ループを書き直さないといけなくなりました。そこで、典型的なパターンを書き直す方法をまとめてみました。 for var i = 0 ; i < 100 ; i++ もっとも典型的な C言語スタイルの for ループ、0 から 100 未満の for ループの場合です。
頭の体操 iOS馬場の勉強会で取り組んでいた課題が面白そうだったので、会場で時間切れになったネタを持ち帰ってみました。そこで、今回は頭の体操をしてみたいと思います。読者の方も単に読みとばすのではなくて、自分ならどうすると考えながら読んでいただけると幸いです。 まず前回(直前)、「Swift で Key や Value に弱参照が使える Dictionary 的な方法を考える」の中で、最初に出てきたコードがこれです。 class ZStrongToWeakMapTable<K: AnyObject, V: AnyObject> { let mapTable: NSMapTable init() { self.mapTable = NSMapTable.strongToWeakObjectsMapTable() // <== Here !! } subscript(key: K) -> V?
結構理解しているつもりだった UIPageViewController でしたが、毎回同じようなところで何度もハマるので、忘れる前に記憶の整理を兼ねてメモしておく事とします。 一、PageCurl と Scroll を動的に変更したい場合は、InterfaceBuilderではなく、コードで作成すべし transitionStyle は readonly なので、InterfaceBuilder でインスタンス化させると、transitionStyle は変更できません。それで PageCurl と Scroll を動的に変更したい場合は、自分の ViewController 内に、コードでインスタンス化させて追加します。そうすれば、変更したい場合は、UIPageViewController 自体を一旦削除して作り直す事ができます。
Swift で マネージャー系のコードを書く時にはシングルトンの実装を迫られる場合があります。インスタンスとしていくつも存在されても困る場合があるからです。そんな時に便利な二つのイディオムを紹介します。 通常のシングルトン
SwiftでC言語のunion的な使い方 先日勉強会でSwiftにはC言語の共用体unionってないのでしょうかという質問があったので、Swiftでunion的な使い方を紹介したいと思います。 enumをC言語の共用体として使う Swiftの予約後にはunion keywordはありません。Swift のドキュメント*1 にはバーコードの値を扱うenum Barcodeの例が出ています。UPCAとQRCodeでは扱うデータの型が異なるため同じ型として扱いにくいのは確かですが、Swiftのenumを使えば、unionのように扱う事ができます。 enum Barcode { case UPCA(Int, Int, Int, Int) case QRCode(String) }
このページを最初にブックマークしてみませんか?
『@codelynxのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く