{"id":20721311,"url":"https://github.com/meyusufdemirci/exampleprojectideas","last_synced_at":"2025-04-23T15:14:38.182Z","repository":{"id":49094480,"uuid":"494991028","full_name":"meyusufdemirci/ExampleProjectIdeas","owner":"meyusufdemirci","description":"Example project ideas from beginning to the advanced tier for iOS development","archived":false,"fork":false,"pushed_at":"2022-07-23T12:24:29.000Z","size":26,"stargazers_count":112,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-23T15:14:29.167Z","etag":null,"topics":["beginners","example","ideas","ios","projects","swift","uikit"],"latest_commit_sha":null,"homepage":"","language":null,"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/meyusufdemirci.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}},"created_at":"2022-05-22T07:35:12.000Z","updated_at":"2025-03-31T06:55:05.000Z","dependencies_parsed_at":"2022-08-23T09:01:33.381Z","dependency_job_id":null,"html_url":"https://github.com/meyusufdemirci/ExampleProjectIdeas","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/meyusufdemirci%2FExampleProjectIdeas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meyusufdemirci%2FExampleProjectIdeas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meyusufdemirci%2FExampleProjectIdeas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meyusufdemirci%2FExampleProjectIdeas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meyusufdemirci","download_url":"https://codeload.github.com/meyusufdemirci/ExampleProjectIdeas/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250457792,"owners_count":21433734,"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":["beginners","example","ideas","ios","projects","swift","uikit"],"created_at":"2024-11-17T03:26:56.765Z","updated_at":"2025-04-23T15:14:38.164Z","avatar_url":"https://github.com/meyusufdemirci.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"Are you struggling to find a project to make progress in your iOS career? Here is the document that tells you project ideas from the beginning to the advanced tier.  \n\nPlease focus on and learn the keywords deeply in the project descriptions!\n\nIf you indent to get the best result, follow the projects by order. Do not jump from the first project to the fifth one.\n\n# Projects\n- [Calculator](#calculator)\n- [To-Do List](#to-do-list)\n- [Movies](#movies)\n- [News](#news)\n\n## Calculator\nBuild a simple single-page calculator.  \nIt should have numbers from 0 to 9, plus, minus, divide, and multiply buttons with their actions.  \nAlso, a label to show the result of the process.\n  \n#### Goals\n- Get familiar with communication between the controller and its view\n- Align UI components regularly\n- Understand the logic mechanism in the controller\n- Make a meaningful, tidy folder structure\n  \n#### Architecture\nUse the pure MVC which is the simplest architecture in iOS development. No need for a view model.\n  \n#### Language / Framework\nSwift with UIKit. No need to use SwiftUI for now.\n  \n#### Responsive Design\n- Use only one storyboard. Make all design processes in a single storyboard. No need to create separated storyboards or xib files\n- Fill the buttons on the screen by using horizontal and vertical stack views\n- Use constraints to make a dynamic sized stack view\n- You are free to align the buttons as you wish.\n\n#### Logic\nInsert outlets and actions of the buttons to the controller. Make the calculation by the operator. Use functions to make different calculations.\n  \n#### Keywords\n- MVC\n- Storyboard\n- Auto Layout\n- StackView\n\n## To-Do List\nBuild a three-paged to-do list app that is similar to Apple's native Reminder app.  \nIt will have two screens. The first one is the list screen includes to-dos with their description, date, and time. Each to-do has a check button to make it completed.  \nBy tapping the plus(create) button, the create to-do screen opens. Users can define a description, date, and time on the to-do. A create button provides saving the to-do and it will be seen in the list on the list screen.  \nIn case the user taps on one of the to-dos, the detail page shows, and the user can edit the to-do.\n\n#### Goals\n- Understand MVVM by separating logic between controller and view model\n- Learn to implement table view\n- Integrate third-party library\n- Build UI programmatically in controller\n- Use model(such as ToDo) with Codable\n- Use UserDefaults to fetch and save data locally\n\n#### Architecture\nUse simple MVVM. No need to use protocols for now. Do not forget that **you must not import UIKit in the view model**.\n\n#### Language / Framework\nSwift with UIKit\n\n#### Responsive Design\n- Integrate [SnapKit](https://github.com/SnapKit/SnapKit) via **SPM** and build UI programmatically. No need to use any Storyboard od xib files\n- Use table view in the list screen\n- You are free to build UI as you wish\n\n#### Logic\nImplement Codable to your To-Do model and store to-dos as an array in local by using UserDefaults.\n\n#### Keywords\n- MVVM\n- Table view\n- Codable\n- SPM\n- SnapKit\n- UserDefaults\n\n#### Tips\n- Use **viewWillAppear** or **viewDidAppear** in the list screen to refresh the data\n\n## Movies\nBuild a four-paged movie list app.  \nIt will have four screens. The first appearing screen is the splash screen. The data must be fetched from the [API](https://developers.themoviedb.org/3/getting-started/introduction) in here. As soon as the process is done, endirect the user to the app.\nThe first screen inside the app is the list screen that has list of movies with supporting search and filter. I can able to search by the name of the movie and filter by the category(the genres property in the movie object) of the movie. Each cell must at least have an image, title, and image of the movie.\nBy tapping one of the movies, the movie detail screen must appear. I can able to add the movie into the bookmarks via a button.\nThe last screen is the bookmarks which have the bookmarked movies. No need filter and search here, only a list.  \nThe list and bookmarks screens must be on a **TabBarController**. Tab bars' each first item must be **NavigationController**.  \n\n#### Goals\n- Understand Tab Bar and Navigation Controller\n- Understand MVVM by separating logic between controller and view model\n- Learn to implement table view\n- Integrate third-party library\n- Build UI programmatically in controller\n- Use UserDefaults\n- Integrate network layer by URLSession\n- Use model(such as Movie) with Codable\n\n#### Architecture\n- Use simple MVVM. Do not forget that **you must not import UIKit in the view model**\n- Use protocols to pass the data from the network layer to the screen\n\n#### Language / Framework\nSwift with UIKit\n\n#### Responsive Design\n- Integrate SnapKit to build UI programmatically. No need to use any Storyboard od xib files\n- Use table view in the list screen\n- Download movie images via [Kingfisher](https://github.com/onevcat/Kingfisher)\n\n#### Logic\n- The search and filter mechanism in the list screen must work without blocking UI\n- Implement Codable to your Movie model and store movies as an array in a singleton object\n- Store bookmarked movies in the UserDefaults as an array\n\n#### Keywords\n- MVVM\n- Table view\n- Codable\n- SPM\n- SnapKit\n- Kingfisher\n- Network layer\n- URLSession\n- Singleton\n- UserDefaults\n\n#### Note\nThis is one of the most essential projects since most of the companies ask this kind of case/challenge to understand your technical knowledge. Be more serious on this project than others!\n\n## News\nBuild a four-paged news list app.  \nIt will have four screens. The first appearing screen is the splash screen. Ask push notification permission at splash.  \nThe second screen is the list that includes the news from now to the past. Fetch the data from [Google News API](https://newsapi.org/s/google-news-api). I can able to refresh the data by the pull to refresh.  \nThe list screen must have a search and filter which can work at the same time. I can able to search by text and filter by date range such as from 01/01/2022 to 30/01/2022. **The search must work with the API, not locale**.  \nBy tapping one of the news, the news detail screen must appear. I can able to add the news to the favorites via a button.  \nThe last screen is the favorites that have the favorite news. No need filter and search here, only a list. Store the favorites with their news title and source URL. Open Safari when a favorited news is tapped.  \nUse TabBarController to store the list and favorites screens.\n\n#### Goals\n- Learn asking permission\n- Learn how to use closures\n- Understand MVVM by separating logic between controller and view model\n- Integrate third-party library\n- Build UI programmatically in controller\n- Use UserDefaults\n- Integrate generic network layer by Alamofire\n- Use model(such as News) with Codable\n- Understand localization\n- Write unit test\n\n#### Architecture\n- Use simple MVVM. Do not forget that **you must not import UIKit in the view model**\n- Use closures to communicate between controller and view model\n- Build a generic network layer combined with Alamofire. Here is an [article](https://demirciy.medium.com/generic-network-layer-in-ios-development-2bffff780832) about it\n- Use protocols to pass the data from the network layer to the screen\n\n#### Language / Framework\nSwift with UIKit\n\n#### Responsive Design\n- Integrate SnapKit to build UI programmatically. No need to use any Storyboard od xib files\n- Use table view in the list screen\n- Download news images via [Kingfisher](https://github.com/onevcat/Kingfisher)\n\n#### Logic\n- The push notification permission must be async in the splash screen. The screen waits for the user's response to show the next screen\n- The search and filter mechanism in the list screen must work without blocking UI\n- Store favorited news in the UserDefaults as an array\n- Localize texts in at least two languages\n- At least the view models and network layer must be covered by the unit test\n\n#### Keywords\n- MVVM\n- Table view\n- Codable\n- SPM\n- SnapKit\n- Kingfisher\n- Generic network layer\n- Alamofire\n- UserDefaults\n- Localization\n- Unit test\n- Closure\n\n#### Note\nThis is one of the most essential projects since most of the companies ask this kind of case/challenge to understand your technical knowledge. Be more serious on this project than others!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeyusufdemirci%2Fexampleprojectideas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeyusufdemirci%2Fexampleprojectideas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeyusufdemirci%2Fexampleprojectideas/lists"}