未修正のアプリが数多く残っている状態なので、パブリックな場所での言及には注意して下さい
未修正のアプリが数多く残っている状況ですが、すでに広く情報が公開されており、2.5.2で修正されたという情報が広まると混乱が生じるため広く周知する次第です。
AFNetworking 2.5.1 にMITM攻撃を許す脆弱性があり、2.5.2で修正された、 と報道されていますが、これは誤りです。
| #import <UIKit/UIKit.h> | |
| #import "AppDelegate.h" | |
| int main(int argc, char * argv[]) | |
| { | |
| @autoreleasepool { | |
| [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"UIDisableLegacyTextView"]; | |
| return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); | 
| // | |
| // ViewController.swift | |
| // Tetris | |
| // | |
| // Created by Julius Parishy on 11/19/14. | |
| // Copyright (c) 2014 Julius Parishy. All rights reserved. | |
| // | |
| import UIKit | 
未修正のアプリが数多く残っている状態なので、パブリックな場所での言及には注意して下さい
未修正のアプリが数多く残っている状況ですが、すでに広く情報が公開されており、2.5.2で修正されたという情報が広まると混乱が生じるため広く周知する次第です。
AFNetworking 2.5.1 にMITM攻撃を許す脆弱性があり、2.5.2で修正された、 と報道されていますが、これは誤りです。
When Swift was first announced, I was gratified to see that one of the (few) philosophies that it shared with Objective-C was that exceptions should not be used for control flow, only for highlighting fatal programming errors at development time.
So it came as a surprise to me when Swift 2 brought (What appeared to be) traditional exception handling to the language.
Similarly surprised were the functional Swift programmers, who had put their faith in the Haskell-style approach to error handling, where every function returns an enum (or monad, if you like) containing either a valid result or an error. This seemed like a natural fit for Swift, so why did Apple instead opt for a solution originally designed for clumsy imperative languages?
I'm going to cover three things in this post:
これは、ドリコム Advent Calendar 2015 の6日目です。
5日目は kakaricho さんによる、 2年目エンジニアがエンジニアリーダーをやってみた話 です。
| extension DispatchQueue { | |
| class func mainSyncSafe(execute work: () -> Void) { | |
| if Thread.isMainThread { | |
| work() | |
| } else { | |
| DispatchQueue.main.sync(execute: work) | |
| } | |
| } | |
| class func mainSyncSafe<T>(execute work: () throws -> T) rethrows -> T { | 
| touch ~/.config/fish/config.fish; | |
| echo "set --export ANDROID $HOME/Library/Android;" >> ~/.config/fish/config.fish | |
| echo "set --export ANDROID_HOME $ANDROID/sdk;" >> ~/.config/fish/config.fish | |
| echo "set -gx PATH $ANDROID_HOME/tools $PATH;" >> ~/.config/fish/config.fish | |
| echo "set -gx PATH $ANDROID_HOME/tools/bin $PATH;" >> ~/.config/fish/config.fish | |
| echo "set -gx PATH $ANDROID_HOME/platform-tools $PATH;" >> ~/.config/fish/config.fish | |
| echo "set -gx PATH $ANDROID_HOME/emulator $PATH" >> ~/.config/fish/config.fish | |
| echo "set --export JAVA_HOME /Applications/Android\ Studio.app/Contents/jbr/Contents/Home;" >> ~/.config/fish/config.fish | 
| final class Loader: BindableObject { | |
| let didChange = PassthroughSubject<Data?, Never>() | |
| var task: URLSessionDataTask! | |
| var data: Data? = nil { | |
| didSet { | |
| didChange.send(data) | |
| } | |
| } | |
| init(_ url: URL) { | 
| import Dispatch | |
| @globalActor | |
| final actor MyMainActor { | |
| // Don’t allow others to create instances | |
| private init() {} | |
| // Requirements from the implicit GlobalActor conformance | |
| typealias ActorType = MyMainActor | |