Skip to content

Instantly share code, notes, and snippets.

Avatar

Marcelo Perretta bubudrc

View GitHub Profile
@bubudrc
bubudrc / Hashes.swift
Last active February 3, 2023 19:07
HMAC Using SHA1 with Secret Key (Works for other HMAC algorithms) for CryptoKit
View Hashes.swift
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
View Image+Data.swift
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.
View FourColumns.swift
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
View GoogleTranslate.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.
View Optional+Extensions.swift
/*
* 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
View AuthImagePickerSettings.swift
//
// 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…
View SpeechManager.swift
//
// 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)
View CustomTitleView.swift
// 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
View UISearchBar+Ext.swift
//
// 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
@bubudrc
bubudrc / HTTPStatusCode.swift
Created February 2, 2022 14:32 — forked from ollieatkinson/HTTPStatusCode.swift
HTTP status codes as a Swift enum.
View HTTPStatusCode.swift
/// This is a list of Hypertext Transfer Protocol (HTTP) response status codes.
/// It includes codes from IETF internet standards, other IETF RFCs, other specifications, and some additional commonly used codes.
/// The first digit of the status code specifies one of five classes of response; an HTTP client must recognise these five classes at a minimum.
enum HTTPStatusCode: Int, Error {
/// The response class representation of status codes, these get grouped by their first digit.
enum ResponseType {
/// - informational: This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line.
case informational