모닥불 앞에 있으면 몸이 따뜻해지듯이, 모닥이가 당신의 마음을 따뜻하게 어루만져 주길.
Like getting warm in front of a bonfire, Hope Modakyi warms your heart.
- Motive
- Goals
- Login
- Text Management
- Home
- Detail
- Favorite and Unused
- Search
- Settings
- Design
- First time dealing with thise
- Contact
- Version History
I find sayings on social media every day and write them down on my planner. It is cumbersome to look up every time, and there is a limit to remembering whether or not to use it. So I made a collection of sayings app, Modakyi.
- Users can easily see the sayings in one space.
- Users can indicate whether they like or used the sayings, and view them separately.
- Every time the user accesses the app, recommend a random saying.
When you access the app, the first screen you see is the login screen. If there is a currently logged in user, it moves to the main screen (home). There are 4 types of login, all using FirebaseAuth
. Code is here
At first, only email, Google, and Apple logins were implemented, but Apple rejected the application saying that it should be possible to use the app without login. This is described in App Store Review Guidelines 5.1.1(v).
The text is stored and used in the following format. Code is here
struct StudyStimulateText: Codable {
let id: String // Text id
let kor: String // Korean
let eng: String // English
let who: String // The person who spoke the text
let time: String // Upload time
}
In fact, the text is stored in the Firebase RealtimeDatabase
as follows. ('Text' + textID)
is used as a unique ID. One new text is added and managed every day.
On the home screen, recommended text and all texts
are displayed. Code is here
By accessing the Text path of Firebase RealitimeDatabase, the entire text is fetched, and a random value from the entire text is fetched as the recommended text ID. And if it is within two days
from the upload time to today, it is classified as a new text.
A red dot
is displayed in the cell of the new text. If the user has already clicked, the red dot is not displayed.
This is the screen that appears when you click a cell. You can check whether you like or used the phrase, and you can share it as text or an image. Code is here
When this screen is displayed, the text ID
is passed, and text information is retrieved with this id.
Like and used is checked every time the screen is shown (viewWillAppear). Access the User/(userUid)/like
and User/(userUid)/used
paths to get the favorite texts IDs (likeTextIDs) and used texts IDs (usedTextIDs), respectively. If the id of the current text is included here, the button is displayed as selected.
When the text or image sharing button is clicked, a notification is received from the NotificationCenter
and the sharing screen is displayed.
This is a screen where user can see only the texts that user like. Access the User/(userUid)/like
path to get the ID of the text that the user likes. Code is here
This is a screen where the user can see only the texts that have not been used yet. Access the User/(userUid)/used
path and get the opposite value of the ID of the text used by the user. Code is here
You can find texts that contain search values. Implemented the SearchBar action by inheriting UISearchBarDelegate
. If you enter a search term and click the search button, the search result is derived through the filter statement and displayed in CollectionView. Code is here
Various functions such as notification setting, theme change, font change, notice, inquiry and opinion, app rating, how to use, version information, account information, and logout are provided on the setting screen. Code is here
-
The goal was to control it with a switch button, but I couldn't achieve it. Therefore, it was implemented by moving to the basic setting screen.
-
You can change the theme and font of the app. By using
ThemeManager
andFontManager
, values are stored inUserDefaults
, loaded and applied. Code is here -
It is a screen to notify simple announcements or updated contents.
-
It shows the email composing screen using the
MessageUI
framework. You can write an email and send it to the developer. If sending mail fails, an Alert window is displayed to notify the user to install the Mail app or check the email settings. -
Go to the App Store review writing screen. By sending
"write-review"
to theURLQueryItem
, it immediately brings up the review writing screen. -
Shows the tutorial screen that appears when you first install and access the app.
-
This screen shows the current version and the latest version. The current version was retrieved by accessing
Bundel.main.infoDictionary
as a key value, and the latest version was retrieved after reading the information of 'Modaki' released in the App Store in JSON format. -
You can check the profile image, nickname, email, and login method of the currently logged in user. Get the information of the currently logged in user using
FirebaseAuth
. -
Logs out the currently logged in user. If the user is anonymous, the account will be deleted upon logout, so user data must also be deleted.
It checks whether the current user is anonymous through
isAnonymous
ofFirebaseAuth
. If it is an anonymous user, delete the data in the User/(userUid) path and go to the login screen.If it is not, it only handles logout and moves to the login screen. When you access the app again, the login screen is displayed because user have previously logged out.
The color is reminiscent of the bonfire, the symbol of Modakyi.
To express the bonfire, it is composed of a fire image with a point color.
-
Previously, data was stored locally on the device using UserDefaults, but this time the data is stored in Firebase's Realtime Database, a cloud service.
In addition, FCM (Firebase Cloud Messaging) was used to send a daily new text upload notification to the user's device, and using an authentication service, email login, social (Google, Apple) login, and anonymous login were also implemented.
-
An interstitial advertisement was added along with the AdMob banner advertisement that was dealt with during the development of 'Scoit'. An interstitial ad is displayed whenever the detailed screen that appears when a text is clicked is dismissed. I made the interstitial ad object into a variable and set the root view of the object as the current screen and opened it.
-
I wanted to show the current version of the app on the settings screen and the latest version released on the app store, so I tried this for the first time. I think it's a very useful feature because it's actually used for setting up quite a few apps.
-
This is my first time using UIActivityViewController to share text as text or image. In order to display this view in a PopOver format, the position had to be determined. It was rejected once because of the problem that an error occurred on the iPad because the location was not specified, but it was resolved.
-
This is my first time working with MessageUI to send feedback to developers using the Mail app. Since the Mail app does not run in the simulator, we tested it with a real device. And when the mail transmission failed, an Alert window open and the user was prompted to install the Mail app or check the email settings.
Blog: https://velog.io/@minji0801/iOS-Swift-iOS-기기에서-Mail-앱-이용해서-이메일-보내는-방법
-
Changed from the existing MVC structure to the MVVM structure. There was a lot of confusion about where to write code between ViewController and ViewModel. But I keep thinking that ViewController cannot be directly connected to the Model and is connected through the ViewModel, and I gave the ViewController the things it had to the ViewModel.
https://apps.apple.com/kr/app/%EB%AA%A8%EB%8B%A5%EC%9D%B4/id1596424726
- Provides basic functions
- Reject once (Reason: No anonymous login)
- Fix logout error (write clearer code to proceed with logout when not an anonymous user)
- Add email login loading step
- Delete app update notification (Siren)
- Add banner ad at the bottom of the text
- Fix getting the latest version
- Add text sharing
- Reject 1 time (Reason: Shared screen marked with Popover is not visible on iPad)
- Add app tracking permission
- Add interstitial ads
- Add app rating
- Settings screen UI, text sharing icon change
- Edit tutorial screen
- Add pull-to-refresh to Favorite Phrases, Unused Phrases, and Phrases Search
- Add loading step to Apple login, anonymous login
- UI change (icons and colors, etc.)
- Fix dark mode error
- Freeze iPad screen (no rotation)
- Architecture change (MVVM)
- Settings screen change (TableView)
- Add themes and fonts
- Correct the time of the latest text (2 days)
- Correction of errors in inquiries and comments