Skip to content

Instantly share code, notes, and snippets.

View malcommac's full-sized avatar
👋
Nice to meet u

Daniele Margutti malcommac

👋
Nice to meet u
View GitHub Profile
@malcommac
malcommac / UserExperiments_8.swift
Created January 22, 2022 22:54
UserExperiments_8.swift
public class FFService {
init() {
// ....
switch target {
case .es:
overwriteESFlags()
case .it:
overwriteITFlags()
...
@malcommac
malcommac / UserExperiments_7.swift
Created January 22, 2022 22:53
UserExperiments_7.swift
FFService.main.$allowsSSON.setValue(true, providers: [LocalProvider.self])
@malcommac
malcommac / UserExperiments_6.swift
Created January 22, 2022 22:53
UserExperiments_6.swift
struct UserExperiments: FlagCollectionProtocol {
@FlagCollection(description: "A nested collection")
var secrets: SecretsExperiments
@Flag(key: "sson", default: false, description: "Enable Single-Sign-On")
var allowsSSON: Bool
}
struct SecretsExperiments: FlagCollectionProtocol {
@Flag(default: false, description: "Risky feature!")
@malcommac
malcommac / UserExperiments_5.swift
Created January 22, 2022 22:52
UserExperiments_5.swift
if FFService.user.$allowsSSON.flagValue(from: LocalProvider.self) {
// this is the value of local provider for this flag
}
@malcommac
malcommac / UserExperiments_4.swift
Created January 22, 2022 22:51
UserExperiments_4.swift
if FFService.main.user.allowsSSON {
// do something
} else {
// do something else
}
@malcommac
malcommac / UserExperiments_3.swift
Created January 22, 2022 22:50
Feature Flag Service
public class FFService {
public let main = FFService()
public let user: FlagLoader<UserExperiments>
private init() {
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]..appendingPathComponent("user_flags.xml"))
user = FlagsLoader(UserExperiments.self,
description: .init(name: "User Features", description: "Experimental lab"),
@malcommac
malcommac / UserExperiments_2.swift
Created January 22, 2022 22:49
FlagsCollectionProtocol Example 2
public struct UserExperiments: FlagsCollectionProtocol {
@Flag(key: "sson", default: false, description: "Enable Single-Sign-On")
var allowsSSON: Bool
public init() {}
}
@malcommac
malcommac / UserExperiments.swift
Created January 22, 2022 22:48
FlagsCollectionProtocol Example
public struct UserExperiments: FlagsCollectionProtocol {
// ....
public init() {}
}
@malcommac
malcommac / debugMenu.swift
Created January 22, 2022 22:44
Show Debug Menu in XCode or TestFlight Builds
private lazy var shouldShowDevMenu: Bool = {
#if DEBUG
return true // XCode
#else
guard let path = Bundle.main.appStoreReceiptURL?.path else {
return false // AppStore
}
return path.contains("sandboxReceipt") // TestFlight
#endif
}()
@malcommac
malcommac / MyLib.podspec
Created November 16, 2020 17:30
Podspec
Pod::Spec.new do |s|
s.name = "MyLib"
,,,
s.default_subspec = 'CHTMLSAXParser', 'Core'
s.subspec 'CHTMLSAXParser' do |ss|
ss.library = "CHTMLSAXParser"
ss.source_files = 'Sources/CHTMLSAXParser/**/*.{c}'
ss.public_header_files = "Sources/**/*.{h}"
ss.ios.deployment_target = '9.0'