Skip to content

Instantly share code, notes, and snippets.

Ethan Huang ethanhuang13

Block or report user

Report or block ethanhuang13

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@ethanhuang13
ethanhuang13 / dear$FirstName.md
Created Aug 8, 2019
Important Updates to CNCopyCurrentnetworkInfo API in iOS 13
View dear$FirstName.md

Dear $firstName,

As we announced at WWDC19, we're making changes to further protect user privacy and prevent unauthorized location tracking. Starting with iOS 13, the CNCopyCurrentNetworkInfo API will no longer return valid Wi-Fi SSID and BSSID information. Instead, the information returned by default will be:

SSID: “Wi-Fi” or “WLAN” (“WLAN" will be returned for the China SKU) BSSID: "00:00:00:00:00:00"

If your app is using this API, we encourage you to adopt alternative approaches that don’t require Wi-Fi or network information. Valid SSID and BSSID information from CNCopyCurrentNetworkInfo will still be provided to VPN apps, apps that have used NEHotspotConfiguration to configure the current Wi-Fi network, and apps that have obtained permission to access user location through Location Services.

Test your app on the latest iOS 13 beta to make sure it works properly. If your app requires valid Wi-Fi SSID and BSSID information to function, you can do the following:

View TrackerTests.swift
let tracker = Tracker()
// Which one do you prefer? Consider labels, indendentation, readability...
// 1 func trackEvent(_ event: Event, _ parameters: EventParameter...)
tracker.trackEvent(.viewItem,
.itemId("12345"),
.itemName("An Item"),
.list("List name"))
// 2. func track(event: Event, parameters: EventParameter...)
tracker.track(event: .viewItem, parameters:
@ethanhuang13
ethanhuang13 / HexColor.swift
Created Jan 2, 2019
@dynamicMemberLookup example
View HexColor.swift
// An (useless) example of Swift 4.2 @dynamicMemberLookup attributes.
// let color1 = HexColor().cbcbcb
// let color2 = HexColor().000000 // This can also be built. Will be treat as "000000"
import Foundation
@dynamicMemberLookup
struct HexColor {
subscript(dynamicMember member: String) -> UIColor? {
do {
View .swiftlint.yml
# Updated for SwiftLint 0.29.2
# See all rules: https://github.com/realm/SwiftLint/blob/master/Rules.md
opt_in_rules:
# Opt-in (Default Disabled)
- anyobject_protocol
- array_init
- attributes
- closure_body_length
- closure_spacing
@ethanhuang13
ethanhuang13 / AppStoreReviewGuidelines.md
Last active Jun 29, 2018
App Store Review Guidelines
View AppStoreReviewGuidelines.md

App Store Review Guidelines

1. Safety

When people install an app from the App Store, they want to feel confident that it’s safe to do so—that the app doesn’t contain upsetting or offensive content, won’t damage their device, and isn’t likely to cause physical harm from its use. We’ve outlined the major pitfalls below, but if you’re looking to shock and offend people, the App Store isn’t the right place for your app.

  • 1.1 Objectionable Content Apps should not include content that is offensive, insensitive, upsetting, intended to disgust, or in exceptionally poor taste. Examples of such content include:
    • 1.1.1 Defamatory, discriminatory, or mean-spirited content, including references or commentary about religion, race, sexual orientation, gender, national/ethnic origin, or other targeted groups, particularly if the app is likely to humiliate, intimidate, or place a targeted individual or group in harm’s way. Professional political satirists and humorists are generally exempt from this requirement
@ethanhuang13
ethanhuang13 / SKErrorThrowsAndCatch.swift
Created Apr 14, 2018
Some Error can be catch but not thrown
View SKErrorThrowsAndCatch.swift
import StoreKit
//extension SKError: Error { } // Uncomment this line to make it throwable
func throwError() throws {
throw SKError.unknown // Can not be thrown. Thrown error code type 'SKError.Code' does not conform to 'Error'
}
do {
try throwError()
View wwdc-trip-preparations.markdown

This mini guide has been moved to here.

@ethanhuang13
ethanhuang13 / UIView+isPossiblyVisible.swift
Last active Aug 1, 2019
[WIP] UIView to check is visible on screen. Not perfect solution
View UIView+isPossiblyVisible.swift
extension UIView {
func isPossiblyVisible() -> Bool {
guard isHidden == false,
alpha > 0,
bounds != .zero,
let window = window, // In a window's view hierarchy
window.isKeyWindow, // Does not consider cases covered by another transparent window
window.hitTest(convert(center, to: nil), with: nil) != self
else { return false }
@ethanhuang13
ethanhuang13 / detect-string-language.swift
Created Mar 23, 2017
Detect string language with Swift
View detect-string-language.swift
//: Playground - noun: a place where people can play
//
// The result is not guaranteed to be accurate. Typically, the function requires 200-400 characters to reliably guess the language of a string.
// Reference: [CFStringTokenizerCopyBestStringLanguage(_:_:)](https://developer.apple.com/reference/corefoundation/1542136-cfstringtokenizercopybeststringl)
//
import Foundation
extension String {
func guessLanguage() -> String {
@ethanhuang13
ethanhuang13 / xcode-beta-slink.sh
Last active Sep 11, 2019
Symbolic link from Xcode.app to Xcode-beta.app (Xcode 11)
View xcode-beta-slink.sh
You can’t perform that action at this time.