Skip to content

Instantly share code, notes, and snippets.

View bubudrc's full-sized avatar

Marcelo Perretta bubudrc

View GitHub Profile
@bubudrc
bubudrc / SchedulerPlayground.swift
Created June 25, 2023 06:02 — forked from natanrolnik/SchedulerPlayground.swift
A playground for a small wrapper that manages multiple DispatchWorkItems
import Foundation
import PlaygroundSupport
typealias DispatcherIdentifier = String
class Dispatcher {
private var items = [DispatcherIdentifier: DispatchWorkItem]()
private let queue: DispatchQueue
@bubudrc
bubudrc / Hashes.swift
Last active February 3, 2023 19:07
HMAC Using SHA1 with Secret Key (Works for other HMAC algorithms) for CryptoKit
import Foundation
import CryptoKit
extension String {
func hmacUsingSHA1(_ secretString: String) -> String {
let key = SymmetricKey(data: secretString.data(using: .utf8)!)
let signature = HMAC<Insecure.SHA1>.authenticationCode(for: self.data(using: .utf8)!, using: key)
return Data(signature).map { String(format: "%02hhx", $0) }.joined()
@bubudrc
bubudrc / Image+Data.swift
Created January 30, 2023 15:00 — forked from BrentMifsud/Image+Data.swift
SwiftUI Image from data
import Foundation
import SwiftUI
#if canImport(UIKit)
import UIKit
#elseif canImport(AppKit)
import AppKit
#endif
extension Image {
/// Initializes a SwiftUI `Image` from data.
@bubudrc
bubudrc / FourColumns.swift
Created January 1, 2023 22:47 — forked from douglashill/FourColumns.swift
A sample UIKit app that sets up a four column layout with new iOS 14 API on UISplitViewController.
import UIKit
class FourColumnsContainerViewController: UIViewController {
let outerSplitViewController = UISplitViewController(style: .tripleColumn)
let innerSplitViewController = UISplitViewController(style: .doubleColumn)
let primary = makeContentViewController("App")
let secondary = makeContentViewController("Files")
let mainContent = makeContentViewController("File Content")
let inspector = makeContentViewController("Inspector")
@bubudrc
bubudrc / GoogleTranslate.swift
Created July 14, 2022 13:57
Use Google Translate without API on Swift
private func getTranslationLanguage(translate: String, from originLanguage: String = "auto", to destinationLanguage: String = "en", completion: @escaping (_ result: String?) -> Void) {
// 1- Create the query
if let translatationURL: String = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=\(originLanguage)&tl=\(destinationLanguage)&dt=t&q= \(translate)&ie=UTF-8&oe=UTF-8".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let validURL = URL(string: translatationURL) {
var resultSearch: String = keyword
// 2- Make Request
URLSession.shared.dataTask(with: validURL) { [weak self] data, _, error in
guard error == nil, let data = data else {
@bubudrc
bubudrc / Optional+Extensions.swift
Created May 20, 2022 19:16 — forked from scribblecat/Optional+Extensions.swift
Get Array from Optional NSSet. Especially useful for getting an Array of objects in a Core Data many relationship.
/*
* Returns Array from optional NSSet. Returns empty array if NSSet is nil.
* It's useful for when you want an Array of objects from a Core Data many relationship.
*
* Example usage with managed object `game` with 1-to-many relationship to `Goal` entity:
* let goalArray = game.goals.array(of: Goal.self)
*/
extension Optional where Wrapped == NSSet {
func array<T: Hashable>(of: T.Type) -> [T] {
@bubudrc
bubudrc / AuthImagePickerSettings.swift
Last active May 19, 2022 12:48
ImagePicker. Simple solution to use camera/photo library to pick an image
//
// AuthImagePickerSettings.swift
//
// Created by Marcelo Perretta on 18/05/2022.
//
import UIKit
import AVFoundation
import Photos
import PhotosUI
@bubudrc
bubudrc / SpeechManager.swift
Created April 23, 2022 21:56
This a singleton class that lets dev start, pause, stop an speech in a correct way. Because is a singleton, you can share the instance throw the app. Also, because we set an AVAudioSession, we are able to keep listening the audio when the app goes to the background. To work correctly, you must to set the Capability 'Audio, AirPlay, and Picture i…
//
// SpeechManager.swift
//
// Created by Marcelo Perretta on 22/04/2022.
//
import Foundation
import AVFoundation
// We need this because the delegate doesnt works correctly
@bubudrc
bubudrc / CustomTitleView.swift
Last active April 23, 2022 22:13
This gist shows how to create a custom titleView to use correctly in any UINavigationController (UINavigationItem)
// CustomitleView
//
// Created by Marcelo Perretta on 21/04/2022.
//
import UIKit
class CustomTitleView: UIView {
private let elementsDistance: CGFloat = 5.0
private let iconSize: CGFloat = 25.0
@bubudrc
bubudrc / UISearchBar+Ext.swift
Created March 5, 2022 20:02 — forked from maysamsh/UISearchBar+Ext.swift
A small extension for UISearchBar which shows an UIActivityIndicator while searching
//
// UISearchBar+Ext.swift
// frazeit
//
// Created by Maysam Shahsavari on 7/30/18.
// Updated on 9/26/19.
// Copyright © 2018 Maysam Shahsavari. All rights reserved.
// Updated: 10/02/2020.
import Foundation