{"id":1497,"url":"https://github.com/pavelpantus/PPAssetsActionController","last_synced_at":"2025-08-02T04:32:16.906Z","repository":{"id":62450168,"uuid":"72314905","full_name":"pavelpantus/PPAssetsActionController","owner":"pavelpantus","description":"Highly customizable Action Sheet Controller with Assets Preview written in Swift","archived":false,"fork":false,"pushed_at":"2017-10-09T21:24:54.000Z","size":235211,"stargazers_count":71,"open_issues_count":9,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-29T04:48:27.336Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pavelpantus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-29T23:34:26.000Z","updated_at":"2024-02-20T08:38:45.000Z","dependencies_parsed_at":"2022-11-01T22:31:43.590Z","dependency_job_id":null,"html_url":"https://github.com/pavelpantus/PPAssetsActionController","commit_stats":null,"previous_names":["pantuspavel/ppassetsactioncontroller"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelpantus%2FPPAssetsActionController","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelpantus%2FPPAssetsActionController/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelpantus%2FPPAssetsActionController/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelpantus%2FPPAssetsActionController/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavelpantus","download_url":"https://codeload.github.com/pavelpantus/PPAssetsActionController/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228439024,"owners_count":17920017,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:15:47.839Z","updated_at":"2024-12-06T08:31:19.553Z","avatar_url":"https://github.com/pavelpantus.png","language":"Swift","funding_links":[],"categories":["Media","Libs","UI [🔝](#readme)"],"sub_categories":["Image","UI"],"readme":"# PPAssetsActionController\n\n[![CI Status](http://img.shields.io/travis/pantuspavel/PPAssetsActionController.svg?style=flat)](https://travis-ci.org/pantuspavel/PPAssetsActionController)\n[![codecov.io](https://codecov.io/gh/pantuspavel/PPAssetsActionController/branch/master/graphs/badge.svg)](https://codecov.io/gh/pantuspavel/PPAssetsActionController/branch/master)\n[![Version](https://img.shields.io/cocoapods/v/PPAssetsActionController.svg?style=flat)](http://cocoapods.org/pods/PPAssetsActionController)\n[![License](https://img.shields.io/cocoapods/l/PPAssetsActionController.svg?style=flat)](http://cocoapods.org/pods/PPAssetsActionController)\n[![Platform](https://img.shields.io/cocoapods/p/PPAssetsActionController.svg?style=flat)](http://cocoapods.org/pods/PPAssetsActionController)\n[![Swift Version](https://img.shields.io/badge/Swift-4.0-F16D39.svg?style=flat)](https://developer.apple.com/swift)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\n## Play with me ▶️🖐\nIf you want to play with me, just tap [here](https://appetize.io/app/r69q5w448qx8x3mryqc3d471zm?device=iphone6s\u0026scale=75\u0026orientation=portrait\u0026osVersion=10.0) and enjoy! 🎩🕴\n\n\n## Show me 🎪\n\n![show-me](https://raw.githubusercontent.com/pantuspavel/PPAssetsActionController/master/Media/PPAssetsActionController.gif)\n\n## Try me 📲\nThe easiest way to try me (make sure you read Requirements section first):\n```ruby\npod try PPAssetsActionController\n```\n\n## Requirements 🖥\n\n- 2 minutes of your time 😲\n- [Xcode](https://developer.apple.com/download/)\n- [Bundler](http://bundler.io/)\n- [CocoaPods](http://cocoapods.org/)\n\n\n## How to use me 🔩\n\nIt's super easy to start using PPAssetsActionController.\n\n*Make sure to checkout example project that features quite a few usecases*\n\nAll you need to do is:\n```\nimport PPAssetsActionController\n\nfunc presentAssetsActionController() {\n    let assetsPicker = PPAssetsActionController(with: [])\n    present(assetsPicker, animated: true, completion: nil)\n}\n```\n\n\nIf you want to present couple of options, you do:\n```\nimport PPAssetsActionController\n\nfunc presentAssetsActionController() {\n    let options = [\n        PPOption(withTitle: option1String) { print(\"my option 1 callback\") },\n        PPOption(withTitle: option2String) { print(\"my option 2 callback\") }\n    ]\n    let assetsPicker = PPAssetsActionController(with: options)\n    present(assetsPicker, animated: true, completion: nil)\n}\n```\n\n\nIf you want to know what PPAssetsActionController has to say, become it's delegate:\n```\nimport PPAssetsActionController\n\nclass CustomizationsViewController: UITableViewController {\n    func presentAssetsActionController() {\n        let options = [\n            PPOption(withTitle: option1String) { print(\"my option 1 callback\") },\n            PPOption(withTitle: option2String) { print(\"my option 2 callback\") }\n        ]\n        let assetsPicker = PPAssetsActionController(with: options)\n        assetsPicker.delegate = self\n        present(assetsPicker, animated: true, completion: nil)\n    }\n}\n\nextension CustomizationsViewController: PPAssetsActionControllerDelegate {\n    /**\n    Callbacks implementations you're interested in.\n    */\n}\n\n```\n\n\nIf you want to customize PPAssetsActionController's appearance or behavior check out `PPAssetsActionConfig` struct and use it like this:\n```\nimport PPAssetsActionController\n\nfunc presentAssetsActionController() {\n    let options = [\n        PPOption(withTitle: option1String) { print(\"my option 1 callback\") },\n        PPOption(withTitle: option2String) { print(\"my option 2 callback\") }\n    ]\n    var config = PPAssetsActionConfig()\n    config.tintColor = UIColor.magenta\n    let assetsPicker = PPAssetsActionController(with: options, aConfig: config)\n    present(assetsPicker, animated: true, completion: nil)\n}\n```\n\n\n## Localization 💪\n\nExample project features complete localization to russian language including plurals.\n\nIf you want to check it out just run `PPAssetsActionController_Example_Rus` scheme.\n\nFor more info I suggest to check out [this nice tutorial](http://crunchybagel.com/localizing-plurals-in-ios-development/) by [Quentin Zervaas](https://github.com/HendX).\n\nThe article will put you up to speed with all intricacies of localization in no time.\n\n\n## Example 🚀\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\n## Installation 🤖\n\nPPAssetsActionController is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'PPAssetsActionController'\n```\n\nPPAssetsActionController is also available through [Carthage](https://github.com/Carthage/Carthage).\nAdd the following line to your Cartfile:\n\n```ruby\ngithub \"pantuspavel/PPAssetsActionController\"\n```\n\n## Developer Setup 🤓\n\nTo open the project:\n```bash\ngit clone git@github.com:pantuspavel/PPAssetsActionController.git\ncd PPAssetsActionController\nbundle\ncd Example\npod install\nopen PPAssetsActionController.xcworkspace\n```\n\n## Tests 🐛\n\nTo run automation tests you need to set up simulator and load assets first.\n```bash\ncd PPAssetsActionController\n./.setup_sim.sh \"name=iPad Air 2,OS=10.1\" // See setup_sim.sh to discover all supported simulators.\n```\nWhen script finished go to Xcode and select just created simulator (`assets-vs-ipad-ios10` for iPad version).\n\nPress command+U, enjoy!\n\n## Required Info.plist keys 🔑\n\nIf you're using PPAssetsActionController on iOS10 you need to declare `NSPhotoLibraryUsageDescription`, `NSMicrophoneUsageDescription`, `NSCameraUsageDescription` keys in your application's Info.plist or your app will crash on launch. For example refer to Example project's Info.plist. For more info read [this article](http://useyourloaf.com/blog/privacy-settings-in-ios-10/).\n\n## Feedback 👌\n\nFeedback is very welcome. If you have an idea in mind don't hesitate to ping me on twitter [@pantusp](https://twitter.com/pantusp) or here.\n\nContributions are very welcome and encouraged. If you have something to say file an issue or open a PR to start a conversation going.\n\n## Author 👋\n\nPavel Pantus, [@pantusp](https://twitter.com/pantusp), pantusp@gmail.com\n\n## License 📖\n\nPPAssetsActionController is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelpantus%2FPPAssetsActionController","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavelpantus%2FPPAssetsActionController","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelpantus%2FPPAssetsActionController/lists"}