{"id":16863587,"url":"https://github.com/vbrazo/basic-warehouse","last_synced_at":"2026-05-07T20:07:51.953Z","repository":{"id":114252928,"uuid":"60656660","full_name":"vbrazo/Basic-Warehouse","owner":"vbrazo","description":"[Swift] A sample iOS that allows you to sign in using your Facebook credentials and displays products from an API using Core Data model with a search feature","archived":false,"fork":false,"pushed_at":"2017-07-04T02:55:50.000Z","size":29866,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-24T20:29:58.046Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vbrazo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-08T00:43:40.000Z","updated_at":"2018-05-21T01:50:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"eeebc671-b70b-402b-928e-663009354f9e","html_url":"https://github.com/vbrazo/Basic-Warehouse","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbrazo%2FBasic-Warehouse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbrazo%2FBasic-Warehouse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbrazo%2FBasic-Warehouse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vbrazo%2FBasic-Warehouse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vbrazo","download_url":"https://codeload.github.com/vbrazo/Basic-Warehouse/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244261213,"owners_count":20424903,"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-10-13T14:39:04.598Z","updated_at":"2026-05-07T20:07:46.917Z","avatar_url":"https://github.com/vbrazo.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Installation\n\nGrab the latest code version from [GitHub](https://github.com/vbrazo/Swift-Warehouse.git):\n\n\u003e git clone https://github.com/vbrazo/Swift-Warehouse.git\n\nOr download using [this link](https://github.com/vbrazo/Swift-Warehouse/tree/master/Archives/Swift-Warehouse.zip)\n\n## Dependencies\nTo be able to compile this project you need the following installed on your system.\n\n### XCode\nTo be able to compile the code you need to have XCode 7.2 and iOS (\u003e=) 8.0 installed.\n\n### CocoaPods\n\nThis project uses [CocoaPods](https://cocoapods.org) as dependency manager to install and maintain third party libraries.\nTo [install CocoaPods](https://cocoapods.org/#install) run the following in the OS terminal:\n\n\u003e sudo gem install cocoapods\n\n# Notes\n\n## Core Data\n[Core Data](https://developer.apple.com/library/tvos/documentation/Cocoa/Conceptual/CoreData/index.html) is used to manage the model layer objects on the application. With this structure we are able to maintain the view controllers synchronized as quickly as the model is updated.\n\nCore Data can decrease by 50 to 70 percent the amount of code you write to support the model layer. This is primarily due to the following built-in features that you do not have to implement, test, or optimize.\n\nManaged object context used: `main`, `private` and `master`.\n\nIn this setup, all background queues are given a brand new private queue context. These contexts are created with the concurrency type .PrivateQueueConcurrencyType. They are temporary and will get destroyed once the background queue is done performing a task. The overhead for creating a new instance of a private queue context is very low. Therefore, we can create as many of them as we need.\n\nThe main queue context is a special context that should only be accessed from the main (UI) queue. It is created with the concurrency type .MainQueueConcurrencyType. It acts as a parent for all temporary private queue contexts.\n\nFinally, the master context which also has the concurrency type NSPrivateQueueConcurrencyType acts as a parent for the main queue context itself. The master context is the only one that has access to the persistent store coordinator which is responsible for saving or reading data from an underlying SQLite database.\n\n## Collection View Controller\nI chose collection view controller to display the data because of the distinct cell widths and the flexibility it brings to cell arrangement.\n\n## Facebook SDK\nThe [Facebook SDK for iOS](https://developers.facebook.com/docs/facebook-login/ios) enables people to sign into your app with Facebook Login. \n\n## CCBottomRefreshControl\n[BottomRefreshControl](https://github.com/vlasov/CCBottomRefreshControl) helped me to add bottomRefreshControl property, that could be assigned to UIRefreshControl class instance. It basically implements an ability to add native iOS bottom pull-up to refresh control to UITableView or UICollectionView.\n\n## SwiftyJSON\n[SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) makes it easy to deal with JSON data in Swift. Parsing and deserializing JSON is a little more tedious due to Swift optionals and type-safety. SwiftyJSON helps our project with that and keeps the code clean.\n\n## SwiftHTTP\n[SwiftHTTP](https://github.com/daltoniam/SwiftHTTP) is a thin wrapper around NSURLSession in Swift to simplify HTTP requests. It offers a few cool features such as:\n\n- Convenient Closure APIs\n- NSOperationQueue Support\n- Parameter Encoding\n- Custom Response Serializer\n- Builtin JSON Response Serialization\n- Upload/Download with Progress Closure\n- Concise Codebase\n\n## XCTest\n[XCTest](http://nshipster.com/xctestcase/) is the testing framework. As you may know, tests are codes you write that exercise your app and library code and results in a pass or fail result, measured against a set of expectations. In this project we have a few tests. The name of the functions are:\n\n- testAddWarehouse\n- testResetWarehouse\n- testResetTag\n\n### UI \n\n- testInitialStateIsCorrect\n- testUserFilterAndSearch\n- testBottomPullToRefresh\n\n\n#What kinds of things do you look for in the code, technology choices, team practices etc. that can help to make a project successful? \n\n### Things that I look for in codes:\n1. Formatting\n2. Style\n3. Naming\n4. Test coverage: Is there a test for this code?\n5. Design: How does the code fit with the overall architecture? What design patterns are used in the new code? Does the new code introduce duplication? If so, should we refactor to a more reusable pattern?\n6. Readability \u0026 Maintainability: Is it possible to understand what the code does by reading it? Are there test cases that haven’t been considered?\n7. Functionality: Any potential security problems?\n\n# Technology choices:\nIn this section, we are going to discuss about mobile app development technology. First you have to decide what kind of app works best for our project: native, hybrid or web.\n\nType | Description | Advantage | Disadvantage\n:-- | :-- | :-- | :-- \nNative apps | Native mobile is one that is developed to be ‘native’ to a specific platform: In my project I am working with Apple’s iOS, but there are other plataforms like Google’s Android and Windows Phone. | It optimizes the user experience; the app will operate more quickly because it’s been designed specifically for that platform. | If you wish to build and launch your app on more than one platform you almost need to start each one from scratch.\nHybrid apps | In 2012, HTML5 appeared to be the future of mobile; leading companies like Facebook, LinkedIn and Xero had jumped in and it was getting a lot of attention but last year many of the companies ditch their apps and start again with native apps. | If your app will primarily deliver content, and if it’s important to the business outcome for the app to be cross-platform, you should still consider it. | The reasons for this are simple—these hybrid apps are not as fast, reliable or smooth as native apps.\nWeb Apps | There are three types of web apps: traditional, responsive and adaptive. Traditional web apps include any website. A responsive web app takes on a different design when it’s opened on a mobile device, altering its design to suit the device it is viewed on. | A better user experience; Worldwide Access; Client secure login; Easy install; Always up-to-date; Storage Increase | Internet Reliance; Security; Reduced speed; Browser Support.\n\nIf this was the beginning of a long-term project, we would need to consider a lot of things but the most important ones are:\u003cBR\u003e\n- what features we would implement to decide which type of app would work best for us\n- how much money we have in the bank to invest.\n\n# Team practices:\n\n## Building your team:\n1. Understand what type of values and culture you would like to implement in your team.\u003cBR\u003e\n2. Bring people who are complementary. Don't look only for skills, look in their eyes and look for the brightness.\u003cBR\u003e\n\n## Virtual Teams\n1. Understand what the goals of the projects are.\u003cBR\u003e\n2. Build and use a communications management plan and team operating agreements.\u003cBR\u003e\n3. Select appropriate technologies for team interactions. Use tools like Google Drive (spreadsheets), Slack and Trello to monitor the projects.\u003cBR\u003e\n4. Find places where the team looks forward to and can meet for unplanned interactions.\u003cBR\u003e\n5. Run effective virtual team meetings.\u003cBR\u003e\n6. Implement weekly activities and hackathons.\u003cBR\u003e\n7. Get things done and ship them.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbrazo%2Fbasic-warehouse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvbrazo%2Fbasic-warehouse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbrazo%2Fbasic-warehouse/lists"}