{"id":24544123,"url":"https://github.com/hacktoolkit/htk-ios-twitter","last_synced_at":"2025-03-16T08:10:01.341Z","repository":{"id":21192638,"uuid":"24501610","full_name":"hacktoolkit/htk-ios-Twitter","owner":"hacktoolkit","description":"Basic Twitter client","archived":false,"fork":false,"pushed_at":"2014-10-08T22:51:42.000Z","size":9922,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-22T20:16:05.626Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://hacktoolkit.com","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/hacktoolkit.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2014-09-26T14:00:39.000Z","updated_at":"2015-01-21T06:01:03.000Z","dependencies_parsed_at":"2022-08-28T00:12:54.680Z","dependency_job_id":null,"html_url":"https://github.com/hacktoolkit/htk-ios-Twitter","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/hacktoolkit%2Fhtk-ios-Twitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacktoolkit%2Fhtk-ios-Twitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacktoolkit%2Fhtk-ios-Twitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacktoolkit%2Fhtk-ios-Twitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hacktoolkit","download_url":"https://codeload.github.com/hacktoolkit/htk-ios-Twitter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243841223,"owners_count":20356446,"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":"2025-01-22T20:16:09.318Z","updated_at":"2025-03-16T08:10:01.310Z","avatar_url":"https://github.com/hacktoolkit.png","language":"Swift","readme":"htk-ios-Twitter\n============\n\nThis is a basic Twitter client.\n\n[CodePath iOS Bootcamp](http://codepath.com/iosbootcamp) September 2014 - Week 3 \u0026 4 Project\n\n## GIF Screen Cap\n\nHere's an animated GIF (made with [LiceCAP](http://www.cockos.com/licecap/)) of what it looks like:\n\n![](https://raw.githubusercontent.com/hacktoolkit/htk-ios-Twitter/master/twitter_redux_screencap.gif)\n![](https://raw.githubusercontent.com/hacktoolkit/htk-ios-Twitter/master/twitter_screencap_20141006.gif)\n\n## Download and Build Instructions\n\n* Clone the repository\n* Install [CocoaPods](http://cocoapods.org/)\n  * `sudo gem install cocoapods`\n* Install Pods\n  * `pod install`\n* Update/initialize the [hacktoolkit-ios_lib](https://github.com/hacktoolkit/hacktoolkit-ios_lib) submodule (temporary step until CocoaPods supports Swift source files natively)\n  * `git submodule init`\n  * `git submodule update`\n* Set up API keys\n  * Create a `secrets.xcconfig` config file based on `secrets.xcconfig.template`\n  * Obtain API keys from the [Twitter Developers page](http://www.twitter.com/developers/manage_api_keys) and add the keys to `secrets.xcconfig`\n* Run it!\n\n## Features\n\n### Part 1 - Basic Twitter Client\n\n![](https://raw.githubusercontent.com/hacktoolkit/htk-ios-Twitter/master/twitter_screencap_20141006.gif)\n\nTime spent: 26 hours\n\n**Core User Stories**\n\n* [x] User can sign in using OAuth login flow\n* [x] User can view last 20 tweets from their home timeline\n* [x] The current signed in user will be persisted across restarts\n* [x] In the home timeline, user can view tweet with the user profile picture, username, tweet text, and timestamp. \n* [x] User can pull to refresh\n* [x] User can compose a new tweet by tapping on a compose button.\n* [x] User can tap on a tweet to view it, with controls to retweet, favorite, and reply.\n\n**Optional User Stories**\n\n* [x] Countdown in the upper right for the Tweet limit. Turns red and prevents posting Tweet when it exceeds the limit.\n* [x] After creating a new tweet, a user can view it in the timeline immediately without refetching the timeline from the network.\n* [x] Retweeting and favoriting increments the retweet and favorite count.\n* [x] User can unretweet and unfavorite, and decrements the retweet and favorite count.\n* [x] Replies are prefixed with the username and the reply_id is set when posting the tweet,\n* [x] User can load more tweets once they reach the bottom of the feed using infinite loading similar to the actual Twitter client.\n\n### Part 2 - Twitter Redux\n\n![](https://raw.githubusercontent.com/hacktoolkit/htk-ios-Twitter/master/twitter_redux_screencap.gif)\n\nTime spent: 14 hours\n\n* [x] Hamburger menu\n  * [x] Dragging anywhere in the view reveals the menu\n    * [wip] except when a Navigation controller has pushed above the sidebar menu controller, or Tweet details\n  * [x] The menu includes links to the home timeline, profile, mentions view, settings view, and log out\n  * [x] The menu was inspired by the LinkedIn menu\n\n* [75%] Profile page - getting nil for outlets when using property observer for user and/or `viewDidLoad`\n  * [x] Contains the user header view\n  * [x] Contains a section with the users basic stats: # tweets, # following, # followers\n  * [wip] Optional: Implement the paging view for the user description.\n  * [wip] Optional: As the paging view moves, increase the opacity of the background screen. See the actual Twitter app for this effect\n  * [wip] Optional: Pulling down the profile page should blur and resize the header image.\n\n* [wip] Home Timeline\n  * [wip] Tapping on a user image should bring up that user's profile page\n\n* [wip] Optional: Account switching\n  * [wip] Long press on tab bar to bring up Account view with animation\n  * [wip] Tap account to switch to\n  * [wip] Include a plus button to Add an Account\n  * [wip] Swipe to delete an account\n\n### License\n\nSee `LICENSE`\n\n* The Font Awesome font is licensed under the SIL OFL 1.1:\n  * \u003chttp://scripts.sil.org/OFL\u003e\n* Font Awesome by Dave Gandy - \u003chttp://fontawesome.io\u003e\n  * Full details: \u003chttp://fontawesome.io/license\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacktoolkit%2Fhtk-ios-twitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhacktoolkit%2Fhtk-ios-twitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacktoolkit%2Fhtk-ios-twitter/lists"}