Latest Xcode version is recommended, which can be downloaded from here or from Mac AppStore
Cocoapods which will download the used Libraries in this app, to do that open the Terminal app in your Mac the write in the commandsudo gem install cocoapods
(if you already have Cocoapods you can skip this step)
cd /your_path_to_the_app/
OR
you just type cd then drag and drop the app directory
after that type in the command
pod install
this should install all the libraries in the app, this may take a while depending on your Internet connection.
FireApp.xcworkspace make sure it's xcworkspace NOT xcodeproj{primary} after build finishes you will get an error
GoogleService-Info.plistis missing ,to solve this you have to Setup Firebase after changing Package Name.
another error may show up also like this
Provisioning profile "iOS Team Provisioning Profile: com.devlomi.ifireapp" doesn't match the entitlements file's value for the keychain-access-groups entitlement.
which is okay since you need to complete setting up the project.
Change Bundle Name
go to Config.swift and change bundleName value
click on the project at the left then select General > FireApp > bundle identifier then type in your bundle name then hit enter

apply the same steps on ShareExtension and NotificationService


{primary} extension names (ShareExtension and NotificationService) should have the same bundleName + the extension name. for example the app bundle name is
com.devlomi.ifireappso the extension name should becom.devlomi.ifireapp.+ extension name, in our casecom.devlomi.ifireapp.ShareExtension, and same thing applies onNotificationService
AppGroups which will make Extesnsions communicate with each other.
Signing and Capabilities > choose FireApp Target > AppGroups then hit on the the little plus icon, a window should popup, enter the same bundle name that you entered before, in my case it's com.devlomi.ifireapp so the final result would be group.com.devlomi.ifireapp
now go to ShareExtension and NotificationService Targets and you should see the AppGroup that you've added, if not just create it with the same name
make sure to check the Checkbox.


TeamID from Apple Developer, to do that go to your Apple Developer Account and Sign in with your Paid Apple Developer account, then Select Membership then copy your TeamID
FireApp Target then Scroll down to Keychain Sharing > click on little plus icon
now you have to type in your TeamId.+BundleName.+group.+BundleNameyourTeamId.yourBundleName.group.yourBundleName
so the final result would be like this for example
Y32314SD.com.devlomi.ifireapp.group.com.devlomi.ifireapp

NotificationService
FireApp.entitlements and paste in the Keychain group that you've just created
apply the same thing for NotificationService > NotificationService.entitlements
{primary} if you've changed the Keychain from Targets again you have to edit the entitlements files again since Xcode will modify it once again.
Config.swift and add your Team ID in teamId value.Info.plist > URL Types > item 1(Editor) > URL Schemes > item0 > add a unique name for it, for example yourAppName+Share
copy the same name then go to Config.swift file then replace shareURLScheme with the same key that you just entered in Info.plist.
{warning} if you try to run the app right now it would crash because you have to [Enable Video & Voice Calls]
click on the project name at the left then go to General and change Display Name value then press enter

go to Config.swift and replace appName's value with your app name
there are 2 Types of Encryption supported in the App
go to Config.swift and change encryption_type value to AES
now go to FireApp/Util/Crypto/AES/AESKey.swift and change the KEY value to a unique and strong key. this will be used to Encrypt ALL messages so make sure to NOT share it with anyone.
we are using Virgil's E3 Kit SDK to achieve End to End Encryption, so to use it in your app you have to register for a new account by going to their website . after creating a new account, create a new app

then go to E3Kit and generate your .env file

create a new key

get your credentials, make sure to save them in a file or something, we will use it later.

now go to Backend - Cloud Functions/generate-virgil-jwt.js and open it in any text editor, then start pasting in the values that you've got from Vrigil's website accordingly.
lastly save the file and exit.
Config.swift and change encryption_type value to NONE hen click 'Sync Now' at the topthis will be used when inviting a user to download the app from AppStore, you can get the appId even if the app was not published yet. go to AppStore Connect and sign in with your Apple Developer Account and create a new app if you don't have one.
after that go to App Information and you should see Apple ID, copy it then go to Config.swift in your project and paste it in appId

Enable Ads: go to Config.swift and change the following value as you need. true to enable and false to disable
isChatsAdsEnabled to enable/disable Ads in 'Main/Chats' PageisStatusAdsEnabled to enable/disable Ads in 'Status' PageisCallsAdsEnabled to enable/disable Ads in 'Calls' PageFill in the units IDs:
Info.plist > GADApplicationIdentifier and paste it in.
Config.swift > mainViewAdsUnitId apple-app-site-association with any text editor and add your Apple Team ID + your bundle name
then save the file and do NOT add an extension to it or change the file name
.well-known if it's not exists, then upload the file apple-app-site-association into .well-known
{primary} it's recommended to have a subdomain for this, for example join.yourwebsite.com
Config.swift and change groupHostLink value to your domain, for example http://join.fireapp.devlomi.comapplinks:your.domainlink.com

you can do that by going to Config.swift and change twitter , website , email values to what you want.
if you want to add your own stickers, just expand stickers.bundle and drag and drop the images you want (should be in png or jpg)

you can make your own Privacy Policy in html format and upload it to your own website, OR you can use some websites like this which will help you generating a privacy policy.
after getting your html privacy policy and uploading it to your Website, get the link of it and include it in Config.swift > privacyPolicyLink