=> {
}
});
+ // Automatically check for and install the latest version in the background
+ ipcMain.on(ELECTRON_EVENTS.SILENT_UPDATE, () => {
+ if (isSilentUpdating) {
+ return;
+ }
+ isSilentUpdating = true;
+ manuallyCheckForUpdates(undefined, browserWindow);
+ });
+
return browserWindow;
})
diff --git a/docs/_data/_routes.yml b/docs/_data/_routes.yml
index 20de9415bcd6..ad738e44ab44 100644
--- a/docs/_data/_routes.yml
+++ b/docs/_data/_routes.yml
@@ -54,6 +54,11 @@ platforms:
icon: /assets/images/hand-card.svg
description: Explore the perks and benefits of the Expensify Card.
+ - href: travel
+ title: Travel
+ icon: /assets/images/plane.svg
+ description: Manage all your corporate travel needs with Expensify Travel.
+
- href: copilots-and-delegates
title: Copilots & Delegates
icon: /assets/images/envelope-receipt.svg
@@ -114,15 +119,20 @@ platforms:
icon: /assets/images/money-into-wallet.svg
description: Learn more about expense tracking and submission.
- - href: bank-accounts-and-payments
- title: Bank Accounts & Payments
- icon: /assets/images/bank-card.svg
- description: Send direct reimbursements, pay invoices, and receive payment.
-
- href: expensify-card
title: Expensify Card
icon: /assets/images/hand-card.svg
description: Explore the perks and benefits of the Expensify Card.
+
+ - href: travel
+ title: Travel
+ icon: /assets/images/plane.svg
+ description: Manage all your corporate travel needs with Expensify Travel.
+
+ - href: connections
+ title: Connections
+ icon: /assets/images/workflow.svg
+ description: Connect to accounting software to streamline expense approvals.
- href: settings
title: Settings
diff --git a/docs/articles/expensify-classic/expensify-billing/Billing-Overview.md b/docs/articles/expensify-classic/expensify-billing/Billing-Overview.md
index ed44caad546b..a998e279c3f6 100644
--- a/docs/articles/expensify-classic/expensify-billing/Billing-Overview.md
+++ b/docs/articles/expensify-classic/expensify-billing/Billing-Overview.md
@@ -23,7 +23,7 @@ Bundling the Expensify Card with an annual subscription ensures you pay the lowe
If at least 50% of your approved USD spend in a given month is on your company’s Expensify Cards, you will receive an additional 50% discount on the price per member. This additional 50% discount, when coupled with an annual subscription, brings the price per member to $5 on a Collect plan and $9 on a Control plan.
-Additionally, every month, you receive 1% cash back on all Expensify Card purchases, and 2% if the spend across your Expensify Cards is $250k or more (_applies to USD purchases only_). Any cash back from the Expensify Card is first applied to your Expensify bill, further reducing your price per member. Any leftover cash back is deposited directly into your connected bank account.
+Additionally, every month, you receive 1% cash back on all Expensify Card purchases, and 2% if the spend across your Expensify Cards is $250k or more (_applies to US purchases only_). Any cash back from the Expensify Card is first applied to your Expensify bill, further reducing your price per member. Any leftover cash back is deposited directly into your connected bank account.
## Savings calculator
To see how much money you can save (and even earn!) by using the Expensify Card, check out our [savings calculator](https://use.expensify.com/price-savings-calculator). Just enter a few details and see how much you’ll save!
@@ -34,11 +34,9 @@ If less than 50% of your total USD spend is on the Expensify Card, the bill is d
**Example:**
- Annual subscription discount: 50%
-- % of Expensify Card spend (USD) across all workspaces: 20%
+- % of Expensify Card spend (US purchases only) across all workspaces: 20%
- Expensify Card discount: 20%
In that case, you'd save 70% on the price per member for that month's bill.
-Note: USD spend refers to approved USD transactions on the Expensify Card in any given month.
-
{% include faq-end.md %}
diff --git a/docs/articles/expensify-classic/travel/Coming-Soon.md b/docs/articles/expensify-classic/travel/Coming-Soon.md
new file mode 100644
index 000000000000..4d32487a14b5
--- /dev/null
+++ b/docs/articles/expensify-classic/travel/Coming-Soon.md
@@ -0,0 +1,6 @@
+---
+title: Coming soon
+description: Coming soon
+---
+
+# Coming soon
\ No newline at end of file
diff --git a/docs/articles/expensify-classic/workspaces/Remove-Members.md b/docs/articles/expensify-classic/workspaces/Remove-Members.md
new file mode 100644
index 000000000000..a79d75edc77d
--- /dev/null
+++ b/docs/articles/expensify-classic/workspaces/Remove-Members.md
@@ -0,0 +1,33 @@
+---
+title: Remove a Workspace Member
+description: How to remove a member from a Workspace in Expensify
+---
+
+Removing a member from a workspace prevents them from submitting reports to or accessing the workspace. Please note that it does not delete their account or deactivate their Expensify Card.
+
+## Remove a Workspace Member
+Important: Make sure the employee has submitted all reports, and the reports have been approved and reimbursed, and are in the final approval state.
+1. Go to Settings > Workspaces > Group > [Workspace Name] > Members > Workspace Members
+2. Select the member you'd like to remove and click the **Remove** button at the top of the Members table
+3. If this member was an approver, update the approval workflow so that reports are no longer routed to them
+
+![image of members table in a workspace]({{site.url}}/assets/images/ExpensifyHelp_RemovingMembers.png){:width="100%"}
+
+{% include faq-begin.md %}
+
+## Will reports from this member on this workspace still be available?
+Yes, as long as the reports have been submitted. You can navigate to the Reports page and enter the member's email in the search field to find them. However, Draft reports will be removed from the workspace, so these will no longer be visible to the Workspace Admin.
+
+## Can members still access their reports on a workspace after they have been removed?
+Yes. Any report that has been approved will now show the workspace as “(not shared)” in their account. If it is a Draft Report they will still be able to edit it and add it to a new workspace. If the report is Approved or Reimbursed they will not be able to edit it further.
+
+## Who can remove members from a workspace?
+Only Workspace Admins. It is not possible for a member to add or remove themselves from a workspace. It is not possible for a Domain Admin who is not also a Workspace Admin to remove a member from a workspace.
+
+## How do I remove a member from a workspace if I am seeing an error message?
+If a member is a **preferred exporter, billing owner, report approver** or has **processing reports**, to remove them from the workspace you will first need to:
+
+* **Preferred Exporter**: Go to Settings > Workspaces > Group > [Workspace Name] > Connections > Configure and select a different Workspace Admin in the dropdown for **Preferred Exporter**.
+* **Billing Owner**: Take over billing on the Settings > Workspaces > Group > [Workspace Name] > Overview page.
+* **Processing reports**: Approve or reject the member’s reports on your Reports page.
+* **Approval Workflow**: Remove them as a workflow approver on your Settings > Workspaces > Group > [Workspace Name] > Members > Approval Mode > page by changing the "**Submit reports to**" field.
diff --git a/docs/articles/expensify-classic/workspaces/reports/Scheduled-Submit.md b/docs/articles/expensify-classic/workspaces/reports/Scheduled-Submit.md
index c05df92bbbff..18ad693a1c56 100644
--- a/docs/articles/expensify-classic/workspaces/reports/Scheduled-Submit.md
+++ b/docs/articles/expensify-classic/workspaces/reports/Scheduled-Submit.md
@@ -29,6 +29,8 @@ For individuals or employees: To enable Scheduled Submit on your individual work
**Manually**: An open report will be created, and expenses will be added to it automatically. However, it's important to note that the report will not be submitted automatically; manual submission of reports will be required.This is a great option for automatically gathering all an employee’s expenses on a report for the employee’s convenience, but they will still need to review and submit the report.
+**Instantly**: Expenses are automatically added to a report in the Processing state, and all expenses will continue to accumulate on one report until it is Approved or Reimbursed. This removes the need to submit expenses, and Processing reports can either be Reimbursed right away (if Submit and Close is enabled), or Approved and then Reimbursed (if Submit and Approve is enabled) by a workspace admin.
+
# Deep Dive
## Schedule Submit Override
@@ -36,3 +38,6 @@ If Scheduled Submit is disabled at the group workspace level or configured the f
## Personal Card Transactions
Personal card transactions are handled differently compared to other expenses. If a user has added a card through Settings > Account > Credit Card Import, they need to make sure it is set as non-reimbursable and transactions must be automatically merged with a SmartScanned receipt. If transactions are set to come in as reimbursable or they aren’t merged with a SmartScanned receipt, Scheduled Submit settings will not apply.
+
+## A note on Instantly
+Setting Scheduled Submit frequency to Instantly will limit some employee actions on reports, such as the ability to retract or self-close reports, or create multiple reports. When Instantly is selected, expenses are automatically added to a Processing expense report, and new expenses will continue to accumulate on a single report until the report is Closed or Reimbursed by a workspace admin.
diff --git a/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md b/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md
deleted file mode 100644
index bc0676231544..000000000000
--- a/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-title: Connect a Business Bank Account - US
-description: How to connect a business bank account to Expensify (US)
----
-# Overview
-Adding a verified business bank account unlocks a myriad of features and automation in Expensify.
-Once you connect your business bank account, you can:
-- Reimburse expenses via direct bank transfer
-- Pay bills
-- Collect invoice payments
-- Issue the Expensify Card
-
-# How to add a verified business bank account
-To connect a business bank account to Expensify, follow the below steps:
-1. Go to **Settings > Workspaces > _Workspace Name_ > Bank account > Connect bank account**
-2. Click **Connect online with Plaid**
-3. Click **Continue**
-4. When you reach the **Plaid** screen, you'll be shown a list of compatible banks that offer direct online login access
-5. Login to the business bank account:
-- If the bank is not listed, click the X to go back to the connection type
-- Here you’ll see the option to **Connect Manually**
-- Enter your account and routing numbers
-6. Enter your bank login credentials:
-- If your bank requires additional security measures, you will be directed to obtain and enter a security code
-- If you have more than one account available to choose from, you will be directed to choose the desired account
-
-Next, to verify the bank account, you’ll enter some details about the business as well as some personal information.
-
-## Enter company information
-This is where you’ll add the legal business name as well as several other company details.
-
-- **Company address**: The company address must be located in the US and a physical location (If you input a maildrop address, PO box, or UPS Store, the address will be flagged for review, and adding the bank account to Expensify will be delayed)
-- **Tax Identification Number**: This is the identification number that was assigned to the business by the IRS
-- **Company website**: A company website is required to use most of Expensify’s payment features. When adding the website of the business, format it as, https://www.domain.com
-- **Industry Classification Code**: You can locate a list of Industry Classification Codes [here]([url](https://www.census.gov/naics/?input=software&year=2022))
-
-## Enter personal information
-Whoever is connecting the bank account to Expensify, must enter their details under the Requestor Information section:
-- The address must be a physical address
-- The address must be located in the US
-- The SSN must be US-issued
-
-This does not need to be a signor on the bank account. If someone other than the Expensify account holder enters their personal information in this section, the details will be flagged for review, and adding the bank account to Expensify will be delayed.
-
-## Upload ID
-After entering your personal details, you’ll be prompted to click a link or scan a QR code so that you can do the following:
-1. Upload a photo of the front and back of your ID (this cannot be a photo of an existing image)
-2. Use your device to take a selfie and record a short video of yourself
-
-**Your ID must be:**
-- Issued in the US
-- Current (ie: the expiration date must be in the future)
-
-## Additional Information
-Check the appropriate box under **Additional Information**, accept the agreement terms, and verify that all of the information is true and accurate:
-- A Beneficial Owner refers to an **individual** who owns 25% or more of the business.
-- If you or another **individual** owns 25% or more of the business, please check the appropriate box
-- If someone else owns 25% or more of the business, you will be prompted to provide their personal information
-
-If no individual owns more than 25% of the company you do not need to list any beneficial owners. In that case, be sure to leave both boxes unchecked under the Beneficial Owner Additional Information section.
-
-# How to validate the bank account
-
-The account you set up can be found under **Settings > Workspaces > _Workspace Name_ > Bank account** in either the **Verifying** or **Pending** state.
-
-If it is **Verifying**, then this means we sent you a message and need more information from you. Please review the automated message sent by Concierge. This should include a message with specific details about what's required to move forward.
-
-If it is **Pending**, then in 1-2 business days Expensify will administer 3 test transactions to your bank account. If after two business days you do not see these test transactions, reach out to Concierge for assistance.
-
-After these transactions (2 withdrawals and 1 deposit) have been processed to your account, head to the **Bank accounts** section of your workspace settings. Here you'll see a prompt to input the transaction amounts.
-
-Once you've finished these steps, your business bank account is ready to use in Expensify!
-
-# How to delete a verified bank account
-If you need to delete a bank account from Expensify, run through the following steps:
-1. Go to **Settings > Workspaces > _Workspace Name_ > Bank account**
-2. Click the red **Delete** button under the corresponding bank account
-
-# Deep Dive
-
-## Verified bank account requirements
-
-To add a business bank account to issue reimbursements via ACH (US), to pay invoices (US), or to issue Expensify Cards:
-- You must enter a physical address for yourself, any Beneficial Owner (if one exists), and the business associated with the bank account. We **cannot** accept a PO Box or MailDrop location.
-- If you are adding the bank account to Expensify, you must add it from **your** Expensify account settings.
-- If you are adding a bank account to Expensify, we are required by law to verify your identity. Part of this process requires you to verify a US-issued photo ID. For using features related to US ACH, your ID must be issued by the United States. You and any Beneficial Owner (if one exists), must also have a US address
-- You must have a valid website for your business to utilize the Expensify Card, or to pay invoices with Expensify.
-
-## Locked bank account
-When you reimburse a report, you authorize Expensify to withdraw the funds from your account. If your bank rejects Expensify’s withdrawal request, your verified bank account is locked until the issue is resolved.
-
-Withdrawal requests can be rejected due to insufficient funds, or if the bank account has not been enabled for direct debit.
-If you need to enable direct debits from your verified bank account, your bank will require the following details:
-- The ACH CompanyIDs (1270239450, 4270239450 and 2270239450)
-- The ACH Originator Name (Expensify)
-
-If using Expensify to process Bill payments, you'll also need to whitelist the ACH IDs from our partner [Stripe](https://support.stripe.com/questions/ach-direct-debit-company-ids-for-stripe?):
-- The ACH CompanyIDs (1800948598 and 4270465600)
-- The ACH Originator Name (expensify.com)
-
-If using Expensify to process international reimbursements from your USD bank account, you'll also need to whitelist the ACH IDs from our partner CorPay:
-- The ACH CompanyIDs (1522304924 and 2522304924)
-- The ACH Originator Name (Cambridge Global Payments)
-
-To request to unlock the bank account, go to **Settings > Workspaces > _Workspace Name_ > Bank account** and click **Fix.** This sends a request to our support team to review why the bank account was locked, who will send you a message to confirm that.
-
-Unlocking a bank account can take 4-5 business days to process, to allow for ACH processing time and clawback periods.
-
-## Error adding an ID to Onfido
-
-Expensify is required by both our sponsor bank and federal law to verify the identity of the individual who is initiating the movement of money. We use Onfido to confirm that the person adding a payment method is genuine and not impersonating someone else.
-
-If you get a generic error message that indicates, "Something's gone wrong", please go through the following steps:
-
-1. Ensure you are using either Safari (on iPhone) or Chrome (on Android) as your web browser.
-2. Check your browser's permissions to make sure that the camera and microphone settings are set to "Allow"
-3. Clear your web cache for Safari (on iPhone) or Chrome (on Android).
-4. If using a corporate Wi-Fi network, confirm that your corporate firewall isn't blocking the website.
-5. Make sure no other apps are overlapping your screen, such as the Facebook Messenger bubble, while recording the video.
-6. On iPhone, if using iOS version 15 or later, disable the Hide IP address feature in Safari.
-7. If possible, try these steps on another device
-8. If you have another phone available, try to follow these steps on that device
-If the issue persists, please contact your Account Manager or Concierge for further troubleshooting assistance.
-
-{% include faq-begin.md %}
-## What is a Beneficial Owner?
-
-A Beneficial Owner refers to an **individual** who owns 25% or more of the business. If no individual owns 25% or more of the business, the company does not have a Beneficial Owner.
-
-## What do I do if the Beneficial Owner section only asks for personal details, but my organization is owned by another company?
-
-Please only indicate you have a Beneficial Owner, if it is an individual that owns 25% or more of the business.
-
-## Why can’t I input my address or upload my ID?
-
-Are you entering a US address? When adding a verified business bank account in Expensify, the individual adding the account, and any beneficial owner (if one exists) are required to have a US address, US photo ID, and a US SSN. If you do not meet these requirements, you’ll need to have another admin add the bank account, and then share access with you once verified.
-
-## Why am I asked for documents when adding my bank account?
-
-When a bank account is added to Expensify, we complete a series of checks to verify the information provided to us. We conduct these checks to comply with both our sponsor bank's requirements and federal government regulations, specifically the Bank Secrecy Act / Anti-Money Laundering (BSA / AML) laws. Expensify also has anti-fraud measures in place.
-If automatic verification fails, we may request manual verification, which could involve documents such as address verification for your business, a letter from your bank confirming bank account ownership, etc.
-
-If you have any questions regarding the documentation request you received, please contact Concierge and they will be happy to assist.
-
-## I don’t see all three microtransactions I need to validate my bank account. What should I do?
-
-It's a good idea to wait till the end of that second business day. If you still don’t see them, please reach out to your bank and ask them to whitelist our ACH IDs **1270239450**, **4270239450**, and **2270239450**. Expensify’s ACH Originator Name is "Expensify".
-
-Make sure to reach out to your Account Manager or Concierge once that's all set, and our team will be able to re-trigger those three test transactions!
-
-{% include faq-end.md %}
diff --git a/docs/articles/new-expensify/connections/Coming-Soon.md b/docs/articles/new-expensify/connections/Coming-Soon.md
new file mode 100644
index 000000000000..4d32487a14b5
--- /dev/null
+++ b/docs/articles/new-expensify/connections/Coming-Soon.md
@@ -0,0 +1,6 @@
+---
+title: Coming soon
+description: Coming soon
+---
+
+# Coming soon
\ No newline at end of file
diff --git a/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md b/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md
new file mode 100644
index 000000000000..6bc3b0896912
--- /dev/null
+++ b/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md
@@ -0,0 +1,126 @@
+---
+title: Set up QuickBooks Online connection
+description: Integrate QuickBooks Online with Expensify
+---
+
+
+{% include info.html %}
+To use the QuickBooks Online connection, you must have a QuickBooks Online account and an Expensify Collect plan. The QuickBooks Self-employed subscription is not supported.
+{% include end-info.html %}
+
+The features available for the Expensify connection with QuickBooks Online vary based on your QuickBooks subscription. The features may still be visible in Expensify even if you don’t have access, but you will receive an error if the feature isn't available with your subscription.
+
+Here is a list of the features supported by each QuickBooks Online subscription:
+
+| Feature | Simple Start | Essentials | Essentials Plus |
+|----------------------------|--------------|------------|-----------------|
+| Expense Reports | ✔ | ✔ | ✔ |
+| GL Accounts as Categories | ✔ | ✔ | ✔ |
+| Credit Card Transactions | ✔ | ✔ | ✔ |
+| Debit Card Transaction | | ✔ | ✔ |
+| Classes | | ✔ | ✔ |
+| Customers | | ✔ | ✔ |
+| Projects | | ✔ | ✔ |
+| Vendor Bills | | ✔ | ✔ |
+| Journal Entries | | ✔ | ✔ |
+| Tax | | ✔ | ✔ |
+| Billable | | | ✔ |
+| Location | | | ✔ |
+
+To set up your QuickBooks Online connection, complete the 5 steps below.
+
+# Step 1: Set up employees in QuickBooks Online
+
+Log in to QuickBooks Online and ensure all of your employees are setup as either Vendors or Employees using the same email address that they are listed under in Expensify. This process may vary by country, but you can go to **Payroll** and select **Employees** in QuickBooks Online to add new employees or edit existing ones.
+
+# Step 2: Connect Expensify to QuickBooks Online
+
+
+ - Click your profile image or icon in the bottom left menu.
+ - Scroll down and click Workspaces in the left menu.
+ - Select the workspace you want to connect to QuickBooks Online.
+ - Click More features in the left menu.
+ - Scroll down to the Integrate section and enable the Accounting toggle.
+ - Click Accounting in the left menu.
+ - Click Set up to the right of QuickBooks Online.
+ - Enter your Intuit login details to import your settings from QuickBooks Online to Expensify.
+
+
+# Step 3: Configure import settings
+
+The following steps help you determine how data will be imported from QuickBooks Online to Expensify.
+
+
+ - Under the Accounting settings for your workspace, click Import under the QuickBooks Online connection.
+ - Review each of the following import settings:
+
+ - Chart of accounts: The chart of accounts are automatically imported from QuickBooks Online as categories. This cannot be amended.
+ - Classes: Choose whether to import classes, which will be shown in Expensify as tags for expense-level coding.
+ - Customers/projects: Choose whether to import customers/projects, which will be shown in Expensify as tags for expense-level coding.
+ - Locations: Choose whether to import locations, which will be shown in Expensify as tags for expense-level coding.
+{% include info.html %}
+As Locations are only configurable as tags, you cannot export expense reports as vendor bills or checks to QuickBooks Online. To unlock these export options, either disable locations import or upgrade to the Control Plan to export locations encoded as a report field.
+{% include end-info.html %}
+ - Taxes: Choose whether to import tax rates and defaults.
+
+
+
+# Step 4: Configure export settings
+
+The following steps help you determine how data will be exported from Expensify to QuickBooks Online.
+
+
+ - Under the Accounting settings for your workspace, click Export under the QuickBooks Online connection.
+ - Review each of the following export settings:
+
+ - Preferred Exporter: Choose whether to assign a Workspace Admin as the Preferred Exporter. Once selected, the Preferred Exporter automatically receives reports for export in their account to help automate the exporting process.
+
+{% include info.html %}
+* Other Workspace Admins will still be able to export to QuickBooks Online.
+* If you set different export accounts for individual company cards under your domain settings, then your Preferred Exporter must be a Domain Admin.
+{% include end-info.html %}
+
+ - Date: Choose whether to use the date of last expense, export date, or submitted date.
+ - Export Out-of-Pocket Expenses as: Select whether out-of-pocket expenses will be exported as a check, journal entry, or vendor bill.
+
+{% include info.html %}
+These settings may vary based on whether tax is enabled for your workspace.
+* If tax is not enabled on the workspace, you’ll also select the Accounts Payable/AP.
+* If tax is enabled on the workspace, journal entry will not be available as an option. If you select the journal entries option first and later enable tax on the workspace, you will see a red dot and an error message under the “Export Out-of-Pocket Expenses as” options. To resolve this error, you must change your export option to vendor bill or check to successfully code and export expense reports.
+{% include end-info.html %}
+
+ - Invoices: Select the QuickBooks Online invoice account that invoices will be exported to.
+ - Export as: Select whether company cards export to QuickBooks Online as a credit card (the default), debit card, or vendor bill. Then select the account they will export to.
+ - If you select vendor bill, you’ll also select the accounts payable account that vendor bills will be created from, as well as whether to set a default vendor for credit card transactions upon export. If this option is enabled, you will select the vendor that all credit card transactions will be applied to.
+
+
+
+# Step 5: Configure advanced settings
+
+The following steps help you determine the advanced settings for your connection, like auto-sync and employee invitation settings.
+
+
+ - Under the Accounting settings for your workspace, click Advanced under the QuickBooks Online connection.
+ - Select an option for each of the following settings:
+
+ - Auto-sync: Choose whether to enable QuickBooks Online to automatically communicate changes with Expensify to ensure that the data shared between the two systems is up-to-date. New report approvals/reimbursements will be synced during the next auto-sync period.
+ - Invite Employees: Choose whether to enable Expensify to import employee records from QuickBooks Online and invite them to this workspace.
+ - Automatically Create Entities: Choose whether to enable Expensify to automatically create vendors and customers in QuickBooks Online if a matching vendor or customer does not exist.
+ - Sync Reimbursed Reports: Choose whether to enable report syncing for reimbursed expenses. If enabled, all reports that are marked as Paid in QuickBooks Online will also show in Expensify as Paid. If enabled, you must also select the QuickBooks Online account that reimbursements are coming out of, and Expensify will automatically create the payment in QuickBooks Online.
+ - Invoice Collection Account: Select the invoice collection account that you want invoices to appear under once the invoice is marked as paid.
+
+
+
+{% include faq-begin.md %}
+
+**Why do I see a red dot next to my connection?**
+If there is an error with your connection, you’ll see a red dot next to Accounting in the left menu. When you click Accounting, you’ll also see a red dot displayed next to the QuickBooks Online connection card.
+
+This may occur if you incorrectly enter your QuickBooks Online login information when trying to establish the connection. To resubmit your login details,
+1. Click the three-dot menu to the right of the QuickBooks Online connection.
+2. Click **Enter credentials**.
+3. Enter your Intuit login details (the login information you use for QuickBooks Online) to establish the connection.
+
+{% include faq-end.md %}
+
+
diff --git a/docs/articles/new-expensify/expenses/Connect-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses/Connect-a-Business-Bank-Account.md
new file mode 100644
index 000000000000..8cf0a18ba529
--- /dev/null
+++ b/docs/articles/new-expensify/expenses/Connect-a-Business-Bank-Account.md
@@ -0,0 +1,98 @@
+---
+title: Connect a Business Bank Account
+description: How to connect a business bank account to New Expensify
+---
+
+
+Adding a business bank account unlocks a myriad of features and automation in Expensify, such as:
+- Reimburse expenses via direct bank transfer
+- Pay bills
+- Collect invoice payments
+- Issue the Expensify Card
+
+# To connect a bank account
+1. Go to **Settings > Workspaces > _Workspace Name_ > Bank account > Connect bank account**
+2. Click **Connect online with Plaid**
+3. Click **Continue**
+4. When you reach the **Plaid** screen, you'll be shown a list of compatible banks that offer direct online login access
+5. Login to the business bank account:
+- If the bank is not listed, click the X to go back to the connection type
+- Here you’ll see the option to **Connect Manually**
+- Enter your account and routing numbers
+6. Enter your bank login credentials:
+- If your bank requires additional security measures, you will be directed to obtain and enter a security code
+- If you have more than one account available to choose from, you will be directed to choose the desired account
+
+## Enter company information
+This is where you’ll add the legal business name as well as several other company details.
+
+- **Company address**: The company address must be located in the US and a physical location (If you input a maildrop address, PO box, or UPS Store, the address will be flagged for review, and adding the bank account to Expensify will be delayed)
+- **Tax Identification Number**: This is the identification number that was assigned to the business by the IRS
+- **Company website**: A company website is required to use most of Expensify’s payment features. When adding the website of the business, format it as, https://www.domain.com
+- **Industry Classification Code**: You can locate a list of Industry Classification Codes [here]([url](https://www.census.gov/naics/?input=software&year=2022))
+
+## Enter personal information
+Whoever is connecting the bank account to Expensify, must enter their details under the Requestor Information section:
+- The address must be a physical address
+- The address must be located in the US
+- The SSN must be US-issued
+
+This does not need to be a signor on the bank account. If someone other than the Expensify account owner enters their personal information in this section, the details will be flagged for review, and adding the bank account to Expensify will be delayed.
+
+## Upload ID
+After entering your personal details, you’ll be prompted to click a link or scan a QR code so that you can do the following:
+1. Upload a photo of the front and back of your ID (this cannot be a photo of an existing image)
+2. Use your device to take a selfie and record a short video of yourself
+
+**Your ID must be:**
+- Issued in the US
+- Current (ie: the expiration date must be in the future)
+
+## Additional Information
+Check the appropriate box under **Additional Information**, accept the agreement terms, and verify that all of the information is true and accurate:
+- A Beneficial Owner refers to an **individual** who owns 25% or more of the business.
+- If you or another **individual** owns 25% or more of the business, please check the appropriate box
+- If someone else owns 25% or more of the business, you will be prompted to provide their personal information
+
+If no individual owns more than 25% of the company you do not need to list any beneficial owners. In that case, be sure to leave both boxes unchecked under the Beneficial Owner Additional Information section.
+
+The details you submitted may require additional review. If that's the case, you'll receive a message from the Concierge outlining the next steps. Otherwise, your bank account will be connected automatically.
+
+{% include faq-begin.md %}
+
+## What are the general requirements for adding a business bank account?
+
+To add a business bank account to issue reimbursements via ACH (US), to pay invoices (US), or to issue Expensify Cards:
+- You must enter a physical address for yourself, any Beneficial Owner (if one exists), and the business associated with the bank account. We **cannot** accept a PO Box or MailDrop location.
+If you are adding the bank account to Expensify, you must do so from your Expensify account settings.
+- If you are adding a bank account to Expensify, we are required by law to verify your identity. Part of this process requires you to verify a US-issued photo ID. For using features related to US ACH, your ID must be issued by the United States. You and any Beneficial Owner (if one exists), must also have a US address
+- You must have a valid website for your business to utilize the Expensify Card, or to pay invoices with Expensify.
+
+## What is a Beneficial Owner?
+
+A Beneficial Owner refers to an **individual** who owns 25% or more of the business. If no individual owns 25% or more of the business, the company does not have a Beneficial Owner.
+
+## What do I do if the Beneficial Owner section only asks for personal details, but my organization is owned by another company?
+
+Please indicate you have a Beneficial Owner only if it is an individual who owns 25% or more of the business.
+
+## Why can’t I input my address or upload my ID?
+
+Are you entering a US address? When adding a verified business bank account in Expensify, the individual adding the account and any beneficial owner (if one exists) are required to have a US address, US photo ID, and a US SSN. If you do not meet these requirements, you’ll need to have another admin add the bank account and then share access with you once it is verified.
+
+## Why am I asked for documents when adding my bank account?
+
+When a bank account is added to Expensify, we complete a series of checks to verify the information provided to us. We conduct these checks to comply with both our sponsor bank's requirements and federal government regulations, specifically the Bank Secrecy Act / Anti-Money Laundering (BSA / AML) laws. Expensify also has anti-fraud measures in place.
+If automatic verification fails, we may request manual verification, which could involve documents such as address verification for your business, a letter from your bank confirming bank account ownership, etc.
+
+If you have any questions regarding the documentation request you received, please contact Concierge and they will be happy to assist.
+
+## I don’t see all three microtransactions I need to validate my bank account. What should I do?
+
+It's a good idea to wait until the end of that second business day. If you still don’t see them, please contact your bank and ask them to whitelist our ACH IDs **1270239450**, **4270239450**, and **2270239450**. Expensify’s ACH Originator Name is "Expensify."
+
+Once that's all set, make sure to contact your account manager or concierge, and our team will be able to re-trigger those three test transactions!
+
+{% include faq-end.md %}
+
+
diff --git a/docs/articles/new-expensify/expenses/Track-expenses.md b/docs/articles/new-expensify/expenses/Track-expenses.md
new file mode 100644
index 000000000000..f4eeea09ecec
--- /dev/null
+++ b/docs/articles/new-expensify/expenses/Track-expenses.md
@@ -0,0 +1,43 @@
+---
+title: Track Expenses
+description: Create, store, or share non-reimbursable expenses
+---
+
+
+Create, store, or share non-reimbursable expenses with the Track Expenses feature.
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click the + icon in the bottom left menu and select **Track Expense**.
+2. Create the expense manually, scan the receipt, or add a distance expense.
+
+{% include info.html %}
+For an in-depth walkthrough on how to create an expense, check out the
create an expense article.
+{% include end-info.html %}
+
+3. Choose the next steps for the expense:
+ - **Submit it to someone**: Select this option to request payment from other members of your Expensify workspace.
+ - **Categorize it**: Select this option to choose a category and additional details to code the expense for a specific workspace. The expense will then be placed on a report and can be submitted to the workspace for approval.
+ - **Share it with my accountant**: Select this option to share the expense with your accountant. The expense will then be placed on a report under the workspace for your accountant to review.
+ - **Nothing for now**: Select this option to store the expense. Expensify will keep the expense until you are ready to take action on it—it won’t expire. When you’re ready, you can then select one of the above options for the expense at a later time.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap the + icon in the bottom menu and select **Track Expense**.
+2. Create the expense manually, scan the receipt, or add a distance expense.
+
+{% include info.html %}
+For an in-depth walkthrough on how to create an expense, check out the
create an expense article.
+{% include end-info.html %}
+
+3. Choose the next steps for the expense:
+ - **Submit it to someone**: Select this option to request payment from a contact in your phone’s contact list or from other members of your Expensify workspace.
+ - **Categorize it**: Select this option to choose a category and additional details to code the expense for a specific workspace. The expense will then be placed on a report and can be submitted to the workspace for approval.
+ - **Share it with my accountant**: Select this option to share the expense with your accountant. The expense will then be placed on a report under the workspace for your accountant to review.
+ - **Nothing for now**: Select this option to store the expense. Expensify will keep the expense until you are ready to take action on it—it won’t expire. When you’re ready, you can then select one of the above options for the expense at a later time.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account.md
new file mode 100644
index 000000000000..41ba96a2e2d0
--- /dev/null
+++ b/docs/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account.md
@@ -0,0 +1,29 @@
+---
+title: Unlock a Business Bank Account
+description: How to fix a locked Bank Account
+---
+
+
+When you reimburse a report, you authorize Expensify to withdraw the funds from your account. If your bank rejects Expensify’s withdrawal request, your verified bank account is locked until the issue is resolved.
+
+Withdrawal requests can be rejected due to insufficient funds, or if the bank account has not been enabled for direct debit.
+
+## To request to unlock a bank account:
+1. Go to **Settings > Workspaces > _Workspace Name_ > Bank account** and click **Fix**
+2. This sends a request to our support team to review why the bank account was locked, who will send you a message outlining some next steps
+
+Unlocking a bank account can take several business days to process due to ACH processing times and clawback periods.
+
+**If you need to enable direct debits from your verified bank account, your bank will require the following details:**
+- The ACH CompanyIDs (1270239450, 4270239450 and 2270239450)
+- The ACH Originator Name (Expensify)
+
+**If using Expensify to process Bill payments, you'll also need to whitelist the ACH IDs from our partner [Stripe](https://support.stripe.com/questions/ach-direct-debit-company-ids-for-stripe?):**
+- The ACH CompanyIDs (1800948598 and 4270465600)
+- The ACH Originator Name (expensify.com)
+
+**If using Expensify to process international reimbursements from your USD bank account, you'll need to whitelist the ACH IDs from our payment partner CorPay:**
+- The ACH CompanyIDs (1522304924 and 2522304924)
+- The ACH Originator Name (Cambridge Global Payments)
+
+
diff --git a/docs/articles/new-expensify/expenses/Validate-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses/Validate-a-Business-Bank-Account.md
new file mode 100644
index 000000000000..0767a4c69c3e
--- /dev/null
+++ b/docs/articles/new-expensify/expenses/Validate-a-Business-Bank-Account.md
@@ -0,0 +1,36 @@
+---
+title: Validate a Business Bank Account
+description: Finish connecting your bank account by entering test deposits
+---
+
+
+Once your business bank account connection is approved in Expensify, you'll receive a few test deposits to validate the connection.
+
+## Validating the bank account:
+1. Head to **Settings > Workspaces > _Workspace Name_ > Bank account** to review the status of the bank account
+2. It will show as either **Verifying** or **Pending**
+ - If it is **Verifying**, this means we sent you a message asking for more information —- check your email for the next steps!
+ - If it is **Pending**, the bank account is connected and you can move to the next step
+3. In 1-2 business days Expensify will send three test transactions to your bank account
+4. Head to the **Bank accounts** section of your workspace settings
+5. You'll see a prompt to input the transaction amounts
+
+Once you've finished these steps, your business bank account is ready to use in Expensify!
+
+{% include faq-begin.md %}
+
+## How many test deposits will I receive?
+
+You'll see two withdrawals and one deposit in the business bank account.
+
+## What should I do if I don't see the test deposits after two business days?
+
+If you do not see these test transactions after two business days, this could be due to direct debits not being enabled on the bank account. In that case, your bank will require the following details:
+- The ACH CompanyIDs (1270239450, 4270239450 and 2270239450)
+- The ACH Originator Name (Expensify)
+
+Otherwise, feel free to contact Expensify Support so our team can provide you with more information.
+
+{% include faq-end.md %}
+
+
diff --git a/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md b/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md
new file mode 100644
index 000000000000..24f178db9f12
--- /dev/null
+++ b/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md
@@ -0,0 +1,54 @@
+---
+title: Upgrade to the new Expensify Card from Visa
+description: Get the new Expensify Visa® Commercial Card
+---
+
+
+If your company is already using Expensify Cards, you can upgrade your cards for free to the new Expensify Visa® Commercial Card to get even more tools to manage employee spending, including:
+- Unlimited
virtual cards
+- Controlled spending amounts on virtual cards to manage subscriptions
+- Tighter controls for managing spend across employees and merchants
+- Fixed or monthly spend limits for each card
+- Unique naming for each virtual card for simplified expense categorization
+
+# Upgrade your company’s Expensify Cards
+
+{% include info.html %}
+This process must be completed by a Domain Admin. Although the process is available for all Domain Admins, only one admin needs to complete these steps.
+
+Before completing this process, you’ll want to:
+
+- Have your employees update their address if needed so that they receive their new Expensify Card in the mail before completing the steps below.
+- Ensure that existing cardholders have a limit greater than $0 if you want them to receive a new Expensify Card. If their limit is $0, increase the limit.
+{% include end-info.html %}
+
+1. On your Home page, click the task titled “Upgrade to the new and improved Expensify Card.”
+2. Review and agree to the Terms of Service.
+3. Click **Get the new card**. All existing cardholders with a limit greater than $0 will be automatically mailed a new physical card to the address they have on file. Virtual cards will be automatically issued and available for immediate use.
+4. If you have Positive Pay enabled for your settlement account, contact your bank as soon as possible to whitelist the new ACH ID: 2270239450.
+5. Remind your employees to update their payment information for recurring charges to their virtual card information.
+
+New cards will have the same limit as the existing cards. Each cardholder’s current physical and virtual cards will remain active until a Domain Admin or the cardholder deactivates it.
+
+{% include info.html %}
+Cards won’t be issued to any employees who don’t currently have them. In this case, you’ll need to
issue a new card.
+{% include end-info.html %}
+
+{% include faq-begin.md %}
+
+**Why don’t I see the task to agree to new terms on my Home page?**
+
+There are a few reasons why you might not see the task on your Home page:
+- You may not be a Domain Admin
+- Another domain admin has already accepted the terms
+- The task may be hidden. To find hidden tasks, scroll to the bottom of the Home page and click **Show Hidden Tasks** to see all of your available tasks.
+
+**Will this affect the continuous reconciliation process?**
+
+No. During the transition period, you may have some employees with old cards and some with new cards, so you’ll have two different debits (settlements) made to your settlement account for each settlement period. Once all spending has transitioned to the new cards, you’ll only see one debit/settlement.
+
+**Do I have to upgrade to the new Expensify Visa® Commercial Card?**
+
+Yes. We’ll provide a deadline soon. But don’t worry—you’ll have plenty of time to upgrade.
+{% include faq-end.md %}
+
diff --git a/docs/articles/new-expensify/settings/Add-personal-information.md b/docs/articles/new-expensify/settings/Add-personal-information.md
new file mode 100644
index 000000000000..492d349357ec
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Add-personal-information.md
@@ -0,0 +1,27 @@
+---
+title: Add personal information
+description: Add your legal name, DOB, and/or address for travel and payments
+---
+
+
+You can add private details to your Expensify account that are only visible to you, such as your legal name, date of birth, and/or address. This information is useful for booking travel and for payment purposes.
+
+To add or update your private account details,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Scroll down to the Private details section and click the Legal Name, Date of Birth, and/or Address fields to update them.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Profile** in the left menu.
+3. Scroll down to the Private details section and tap the Legal Name, Date of Birth, and/or Address fields to update them.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Change-or-add-email-address.md b/docs/articles/new-expensify/settings/Change-or-add-email-address.md
new file mode 100644
index 000000000000..28ef00bc5d16
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Change-or-add-email-address.md
@@ -0,0 +1,45 @@
+---
+title: Change or add email address
+description: Add additional email addresses for your Expensify account or update your email
+---
+
+
+The default email address on your Expensify account is the email that receives email updates and notifications for your account. You can add additional contact methods in order to
+- Change your default email to a new one.
+- Connect your personal email address as an additional way to log in if your default email address is one from your employer. This allows you to always have access to your Expensify account, even if your employer changes.
+
+{% include info.html %}
+Before you can remove a default email address, you must add a new one to your Expensify account and make it the default using the steps below. Email addresses must be added as a contact method before they can be made the default.
+{% include end-info.html %}
+
+To change or add an email address,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Click **Contact method**.
+4. Click **New contact method**.
+5. Enter the email address or phone number you want to use as a new default or contact method.
+6. Click **Add**.
+7. You’ll receive an email with a code to verify your email address. Enter the code into the field in Expensify and click **Verify**.
+
+You can click any email address in your list to set it as the default, remove it, or verify it.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Profile** in the left menu.
+3. Tap **Contact method**.
+4. Tap **New contact method**.
+5. Enter the email address or phone number you want to use as a new default or secondary email.
+6. Tap **Add**.
+7. You’ll receive an email with a code to verify your email address. Enter the code into the field in Expensify and tap **Verify**.
+
+You can tap any email address in your list to set it as the default, remove it, or verify it.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Close-account.md b/docs/articles/new-expensify/settings/Close-account.md
new file mode 100644
index 000000000000..e0d8fba2f452
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Close-account.md
@@ -0,0 +1,44 @@
+---
+title: Close account
+description: Close an Expensify account
+---
+
+
+Closing your account will delete the data associated with the account. However, transactions shared with other accounts, including approved and reimbursed company expenses, will still be visible under those accounts. We may also be required to retain certain transaction records in compliance with laws in various jurisdictions.
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Security** in the left menu.
+3. Click **Close account**.
+4. Provide answers to the question prompts, then click **Close Account**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon in the bottom menu.
+2. Tap **Security**.
+3. Tap **Close account**.
+4. Provide answers to the question prompts, then tap **Close Account**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+{% include faq-begin.md %}
+
+**I’m unable to close my account.**
+
+If your account has an outstanding balance or if you have been assigned a role under a company’s Expensify workspace, you may encounter an error message during the account closure process, or the Close Account button may not be available. Here are the steps to follow for each scenario:
+
+- **Account Under a Validated Domain**: A Domain Admin must remove your account from the domain. Then you will be able to successfully close your account.
+- **Sole Domain Admin**: If you are the only Domain Admin for a company’s domain, you must assign a new Domain Admin before you can close your account.
+- **Workspace Billing Owner with an annual subscription**: You must downgrade from the annual subscription before closing the account. Alternatively, you can have another user take over billing for your workspaces.
+- **Company Workspace Owner**: You must assign a new workspace owner before you can close your account.
+- **Account has an outstanding balance**: You must make a payment to resolve the outstanding balance before you can close your account.
+- **Preferred Exporter for a workspace integration**: You must assign a new Preferred Exporter before closing your account.
+- **Verified Business Account that is locked**: You must unlock the account.
+- **Verified Business Account that has an outstanding balance**: You must make a payment to settle any outstanding balances before the account can be closed.
+- **Unverified account**: You must first verify your account before it can be closed.
+{% include faq-end.md %}
+
+
diff --git a/docs/articles/new-expensify/settings/Enable-Two-Factor-Authentication.md b/docs/articles/new-expensify/settings/Enable-Two-Factor-Authentication.md
new file mode 100644
index 000000000000..5f0a33cc8754
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Enable-Two-Factor-Authentication.md
@@ -0,0 +1,51 @@
+---
+title: Enable Two-Factor Authentication (2FA)
+description: Add an extra layer of security for your Expensify login
+---
+
+
+Add an extra layer of security to help keep your financial data safe and secure by enabling two-factor authentication (2FA). This will require you to enter a code generated by your preferred authenticator app (like Google Authenticator or Microsoft Authenticator) when you log in.
+
+To enable 2FA,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Security** in the left menu.
+3. Under Security Options, click **Two Factor Authentication**.
+4. Save a copy of your backup codes. This step is critical! You will lose access to your account if you cannot use your authenticator app and do not have your recovery codes.
+ - Click **Download** to save a copy of your backup codes to your computer.
+ - Click **Copy** to paste the codes into a document or other secure location.
+5. Click **Next**.
+6. Download or open your authenticator app and connect it to Expensify by either:
+ - Scanning the QR code
+ - Entering the code into your authenticator app
+7. Enter the 6-digit code from your authenticator app into Expensify and click **Verify**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Security**.
+3. Under Security Options, tap **Two Factor Authentication**.
+4. Save a copy of your backup codes. This step is critical! You will lose access to your account if you cannot use your authenticator app and do not have your recovery codes.
+ - Tap **Download** to save a copy of your backup codes to your device.
+ - Tap **Copy** to paste the codes into a document or other secure location.
+5. Tap **Next**.
+6. Download or open your authenticator app and connect it to Expensify by either:
+ - Scanning the QR code
+ - Entering the code into your authenticator app
+7. Enter the 6-digit code from your authenticator app into Expensify and tap **Verify**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+When you log in to Expensify in the future, you’ll be emailed a magic code that you’ll use to log in with. Then you’ll be prompted to open your authenticator app to get the 6-digit code and enter it into Expensify. A new code regenerates every few seconds, so the code is always different. If the code time runs out, you can generate a new code as needed.
+
+{% include faq-begin.md %}
+**How do I use my recovery codes if I lose access to my authenticator app?**
+
+Your recovery codes work the same way as your authenticator codes. Just enter a recovery code as you would the authenticator code.
+{% include faq-end.md %}
+
+
diff --git a/docs/articles/new-expensify/settings/Set-timezone.md b/docs/articles/new-expensify/settings/Set-timezone.md
new file mode 100644
index 000000000000..11ce1340c7bb
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Set-timezone.md
@@ -0,0 +1,23 @@
+---
+title: Set timezone
+description: Set your timezone
+---
+
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Click **Timezone** to select your timezone.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Profile** in the left menu
+3. Tap **Timezone** to select your timezone.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Switch-account-language-to-Spanish.md b/docs/articles/new-expensify/settings/Switch-account-language-to-Spanish.md
new file mode 100644
index 000000000000..a431d34fbc0f
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Switch-account-language-to-Spanish.md
@@ -0,0 +1,23 @@
+---
+title: Switch account language to Spanish
+description: Change your account language
+---
+
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Preferences** in the left menu.
+3. Click the Language option and select **Spanish**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon in the bottom menu.
+2. Tap **Preferences**.
+3. Tap the Language option and select **Spanish**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Switch-to-light-or-dark-mode.md b/docs/articles/new-expensify/settings/Switch-to-light-or-dark-mode.md
new file mode 100644
index 000000000000..34f96f9f5f7d
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Switch-to-light-or-dark-mode.md
@@ -0,0 +1,30 @@
+---
+title: Switch to light or dark mode
+description: Change the appearance of Expensify
+---
+
+
+Expensify has three theme options that determine how the app looks:
+- **Dark mode**: The app appears with a dark background
+- **Light mode**: The app appears with a light background
+- **Use Device settings**: Expensify will automatically use your device’s default theme
+
+To change your Expensify theme,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Preferences** in the left menu.
+3. Click the **Theme** option and select the desired theme.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon in the bottom menu.
+2. Tap **Preferences**.
+3. Tap the **Theme** option and select the desired theme.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Update-Notification-Preferences.md b/docs/articles/new-expensify/settings/Update-Notification-Preferences.md
new file mode 100644
index 000000000000..e4111b3d02d3
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Update-Notification-Preferences.md
@@ -0,0 +1,29 @@
+---
+title: Update notification preferences
+description: Determine how you want to receive Expensify notifications
+---
+
+
+To customize the email and in-app notifications you receive from Expensify,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Preferences** in the left menu.
+3. Enable or disable the toggles under Notifications:
+ - **Receive relevant feature updates and Expensify news**: If enabled, you will receive emails and in-app notifications from Expensify about new product and company updates.
+ - **Mute all sounds from Expensify**: If enabled, all in-app notification sounds will be silenced.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon in the bottom menu.
+2. Tap **Preferences**.
+3. Enable or disable the toggles under Notifications:
+ - **Receive relevant feature updates and Expensify news**: If enabled, you will receive emails and in-app notifications from Expensify about new product and company updates.
+ - **Mute all sounds from Expensify**: If enabled, all in-app notification sounds will be silenced.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Update-your-name.md b/docs/articles/new-expensify/settings/Update-your-name.md
new file mode 100644
index 000000000000..d6b65def12ac
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Update-your-name.md
@@ -0,0 +1,33 @@
+---
+title: Update your name
+description: Update your display or legal name
+---
+
+
+Your Expensify account includes two names:
+- Your display name that everyone can see (which can include a nickname)
+- Your legal name that only you can see (for booking travel and for payment purposes)
+
+To update your display or legal name,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Edit your name.
+ - **Display name**: Click **Display Name** and enter your first name (or nickname) and last name into the fields and click **Save**. This name will be visible to anyone in your company workspace.
+ - **Legal name**: Scroll down to the Private Details section and click **Legal name**. Then enter your legal first and last name and click **Save**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap Profile in the left menu.
+3. Edit your name.
+ - **Display name**: Tap **Display Name** and enter your first name (or nickname) and last name into the fields and tap **Save**. This name will be visible to anyone in your company workspace.
+ - **Legal name**: Scroll down to the Private Details section and tap **Legal name**. Then enter your legal first and last name and tap **Save**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/settings/Update-your-profile-status.md b/docs/articles/new-expensify/settings/Update-your-profile-status.md
new file mode 100644
index 000000000000..5e5130f69cd5
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Update-your-profile-status.md
@@ -0,0 +1,34 @@
+---
+title: Update your profile status
+description: Share your status with your team
+---
+
+
+You can update your status in Expensify to let your coworkers know if you are out of the office, in a meeting, or even list your work hours or a different message. This message will appear when someone clicks on your profile or in a chat conversation.
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Click **Status**.
+4. (Optional) Click the emoji icon to add an emoji.
+5. Click the message field and enter a status. For example, out of office, in a meeting, at lunch, etc.
+6. Click **Clear After** to select an expiration for the status. For example, if you select 30 minutes, the status will be automatically cleared after 30 minutes.
+7. Click **Save**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Profile** in the left menu.
+3. Tap **Status**.
+4. (Optional) Tap the emoji icon to add an emoji.
+5. Tap the message field and enter a status. For example, out of office, in a meeting, at lunch, Office Hours: M-F 8-5 PT, etc.
+6. Tap **Clear After** to select an expiration for the status. For example, if you select 30 minutes, the status will be automatically cleared after 30 minutes.
+7. Tap **Save**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
+
diff --git a/docs/articles/new-expensify/settings/Update-your-pronouns.md b/docs/articles/new-expensify/settings/Update-your-pronouns.md
new file mode 100644
index 000000000000..bf0e902092ff
--- /dev/null
+++ b/docs/articles/new-expensify/settings/Update-your-pronouns.md
@@ -0,0 +1,23 @@
+---
+title: Update your pronouns
+description: Display your pronouns on your account
+---
+
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Click **Profile** in the left menu.
+3. Click **Pronouns** to select your pronouns. Type any letter into the field to see a list of available options.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon at the bottom of the screen.
+2. Tap **Profile** in the left menu.
+3. Tap **Pronouns** to select your pronouns. Type any letter into the field to see a list of available options.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+
diff --git a/docs/articles/new-expensify/travel/Coming-Soon.md b/docs/articles/new-expensify/travel/Coming-Soon.md
new file mode 100644
index 000000000000..4d32487a14b5
--- /dev/null
+++ b/docs/articles/new-expensify/travel/Coming-Soon.md
@@ -0,0 +1,6 @@
+---
+title: Coming soon
+description: Coming soon
+---
+
+# Coming soon
\ No newline at end of file
diff --git a/docs/articles/new-expensify/workspaces/Require-tags-and-categories-for-expenses.md b/docs/articles/new-expensify/workspaces/Require-tags-and-categories-for-expenses.md
new file mode 100644
index 000000000000..294dcfc57a23
--- /dev/null
+++ b/docs/articles/new-expensify/workspaces/Require-tags-and-categories-for-expenses.md
@@ -0,0 +1,39 @@
+---
+title: Require tags and categories for expenses
+description: Make tags and/or categories required for all expenses
+---
+
+
+To require workspace members to add tags and/or categories to their expenses,
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. Click your profile image or icon in the bottom left menu.
+2. Scroll down and click **Workspaces** in the left menu.
+3. Select a workspace.
+4. Click **Tags** or **Categories** in the left menu.
+5. Click **Settings** at the top right of the page.
+6. Enable the “Members must tag/categorize all spend” toggle.
+7. If desired, repeat steps 4-6 for tags or categories (whichever you haven’t done yet).
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. Tap your profile image or icon in the bottom menu.
+2. Tap **Workspaces**.
+3. Select a workspace.
+4. Tap **Tags** or **Categories**.
+5. Tap **Settings** at the top right of the page.
+6. Enable the “Members must tag/categorize all spend” toggle.
+7. If desired, repeat steps 4-6 for tags or categories (whichever you haven’t done yet).
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+This will highlight the tag and/or category field as required on all expenses.
+
+{% include info.html %}
+Expenses will still be able to be submitted without a tag and/or category even if they are set as required. The submitter and approver will see an orange dot on the expense details alerting them that the tag/category is missing.
+{% include end-info.html %}
+
+
diff --git a/docs/assets/images/plane.svg b/docs/assets/images/plane.svg
new file mode 100644
index 000000000000..0295aa3c66c0
--- /dev/null
+++ b/docs/assets/images/plane.svg
@@ -0,0 +1,34 @@
+
diff --git a/docs/expensify-classic/hubs/travel/index.html b/docs/expensify-classic/hubs/travel/index.html
new file mode 100644
index 000000000000..7c8c3d363d5e
--- /dev/null
+++ b/docs/expensify-classic/hubs/travel/index.html
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Travel
+---
+
+{% include hub.html %}
diff --git a/docs/new-expensify/hubs/bank-accounts-and-payments/index.html b/docs/new-expensify/hubs/bank-accounts-and-payments/index.html
deleted file mode 100644
index 94db3c798710..000000000000
--- a/docs/new-expensify/hubs/bank-accounts-and-payments/index.html
+++ /dev/null
@@ -1,6 +0,0 @@
----
-layout: default
-title: Bank Accounts & Payments
----
-
-{% include hub.html %}
\ No newline at end of file
diff --git a/docs/new-expensify/hubs/connections/index.html b/docs/new-expensify/hubs/connections/index.html
new file mode 100644
index 000000000000..e467ce8a0f3e
--- /dev/null
+++ b/docs/new-expensify/hubs/connections/index.html
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Connections
+---
+
+{% include hub.html %}
diff --git a/docs/new-expensify/hubs/travel/index.html b/docs/new-expensify/hubs/travel/index.html
new file mode 100644
index 000000000000..7c8c3d363d5e
--- /dev/null
+++ b/docs/new-expensify/hubs/travel/index.html
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Travel
+---
+
+{% include hub.html %}
diff --git a/docs/redirects.csv b/docs/redirects.csv
index c887b649b32d..c3d6020bbc83 100644
--- a/docs/redirects.csv
+++ b/docs/redirects.csv
@@ -169,3 +169,5 @@ https://help.expensify.com/articles/new-expensify/expenses/Referral-Program,http
https://help.expensify.com/articles/expensify-classic/reports/Report-Audit-Log-and-Comments,https://help.expensify.com/articles/expensify-classic/reports/Print-or-download-a-report
https://help.expensify.com/articles/expensify-classic/reports/The-Reports-Page,https://help.expensify.com/articles/expensify-classic/reports/Report-statuses
https://help.expensify.com/articles/new-expensify/getting-started/Free-plan-upgrade-to-collect-plan,https://help.expensify.com/articles/new-expensify/getting-started/Upgrade-to-a-Collect-Plan
+https://help.expensify.com/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account,https://help.expensify.com/new-expensify/hubs/expenses/Connect-a-Bank-Account
+https://help.expensify.com/articles/new-expensify/settings/Profile,https://help.expensify.com/new-expensify/hubs/settings/
diff --git a/ios/NewApp_AdHoc.mobileprovision.gpg b/ios/NewApp_AdHoc.mobileprovision.gpg
index 440309f63c6e..29d379151525 100644
Binary files a/ios/NewApp_AdHoc.mobileprovision.gpg and b/ios/NewApp_AdHoc.mobileprovision.gpg differ
diff --git a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg
index 2de81ee85018..cf14d27d7d87 100644
Binary files a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg and b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg differ
diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj
index 54486d5bf162..94118eb3bfa4 100644
--- a/ios/NewExpensify.xcodeproj/project.pbxproj
+++ b/ios/NewExpensify.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
- 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */; };
083353EB2B5AB22A00C603C0 /* attention.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E72B5AB22900C603C0 /* attention.mp3 */; };
083353EC2B5AB22A00C603C0 /* done.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E82B5AB22900C603C0 /* done.mp3 */; };
083353ED2B5AB22A00C603C0 /* receive.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E92B5AB22900C603C0 /* receive.mp3 */; };
@@ -26,7 +25,6 @@
26AF3C3540374A9FACB6C19E /* ExpensifyMono-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */; };
2A9F8CDA983746B0B9204209 /* ExpensifyNeue-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 52796131E6554494B2DDB056 /* ExpensifyNeue-Bold.otf */; };
30581EA8AAFD4FCE88C5D191 /* ExpensifyNeue-Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */; };
- 3661A1374980E5F6804511FE /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */; };
374FB8D728A133FE000D84EF /* OriginImageRequestHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */; };
383643682B6D4AE2005BB9AE /* DeviceCheck.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 383643672B6D4AE2005BB9AE /* DeviceCheck.framework */; };
7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; };
@@ -36,14 +34,15 @@
7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */; };
7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; };
7FD73CA22B23CE9500420AF3 /* NotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
- 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */; };
+ 8744C5400E24E379441C04A4 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59A21B2405370FDDD847C813 /* libPods-NewExpensify.a */; };
+ 9E17CB36A6B22BDD4BE53561 /* libPods-NotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9196A72C11B91A52A43D6E8A /* libPods-NotificationServiceExtension.a */; };
+ ACA597C323AA39404655647F /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EF33B19FC6A7FE676839430D /* libPods-NewExpensify-NewExpensifyTests.a */; };
BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; };
DD79042B2792E76D004484B4 /* RCTBootSplash.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.mm */; };
DDCB2E57F334C143AC462B43 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D20D83B0E39BA6D21761E72 /* ExpoModulesProvider.swift */; };
E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; };
ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; };
- EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */; };
F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; };
FF941A8D48F849269AB85C9A /* ExpensifyNewKansas-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 44BF435285B94E5B95F90994 /* ExpensifyNewKansas-Medium.otf */; };
/* End PBXBuildFile section */
@@ -83,7 +82,6 @@
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
00E356EE1AD99517003FC87E /* NewExpensifyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NewExpensifyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify-NewExpensifyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
083353E72B5AB22900C603C0 /* attention.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = attention.mp3; path = ../assets/sounds/attention.mp3; sourceTree = ""; };
083353E82B5AB22900C603C0 /* done.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = done.mp3; path = ../assets/sounds/done.mp3; sourceTree = ""; };
083353E92B5AB22900C603C0 /* receive.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = receive.mp3; path = ../assets/sounds/receive.mp3; sourceTree = ""; };
@@ -98,66 +96,54 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = NewExpensify/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = NewExpensify/main.m; sourceTree = ""; };
18D050DF262400AF000D658B /* BridgingFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgingFile.swift; sourceTree = ""; };
- 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release adhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release adhoc.xcconfig"; sourceTree = ""; };
- 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; };
- 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; };
- 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseproduction.xcconfig"; sourceTree = ""; };
- 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release production.xcconfig"; sourceTree = ""; };
+ 1C839668BD5515A8ADE6B15E /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; };
+ 24454472DB373F58A96B1B5C /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; };
+ 289D101B1119F719AAC9EB8B /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; };
374FB8D528A133A7000D84EF /* OriginImageRequestHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OriginImageRequestHandler.h; path = NewExpensify/OriginImageRequestHandler.h; sourceTree = ""; };
374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OriginImageRequestHandler.mm; path = NewExpensify/OriginImageRequestHandler.mm; sourceTree = ""; };
383643672B6D4AE2005BB9AE /* DeviceCheck.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DeviceCheck.framework; path = System/Library/Frameworks/DeviceCheck.framework; sourceTree = SDKROOT; };
- 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; };
+ 3EA3D64F00384537597190CE /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; sourceTree = ""; };
+ 3F17376D588832EE0C4E7E13 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; };
+ 417E30386DDC804B3693037A /* Pods-NewExpensify.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseproduction.xcconfig"; sourceTree = ""; };
44BF435285B94E5B95F90994 /* ExpensifyNewKansas-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-Medium.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-Medium.otf"; sourceTree = ""; };
+ 46B1FE4DE317D30C25A74C15 /* Pods-NewExpensify.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugdevelopment.xcconfig"; sourceTree = ""; };
+ 48E7775E0D42D3E3F53A5B99 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; };
+ 499B0DA92BE2A1C000CABFB0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; };
+ 4A39BBFB1A6AA6A0EB08878C /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; };
4D20D83B0E39BA6D21761E72 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify/ExpoModulesProvider.swift"; sourceTree = ""; };
- 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; };
52796131E6554494B2DDB056 /* ExpensifyNeue-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Bold.otf"; path = "../assets/fonts/native/ExpensifyNeue-Bold.otf"; sourceTree = ""; };
- 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; };
- 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; };
+ 59A21B2405370FDDD847C813 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 687A6DD50C2B5D0DC530C207 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; sourceTree = ""; };
7041848326A8E40900E09F4D /* RCTStartupTimer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RCTStartupTimer.h; path = NewExpensify/RCTStartupTimer.h; sourceTree = ""; };
7041848426A8E47D00E09F4D /* RCTStartupTimer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTStartupTimer.m; path = NewExpensify/RCTStartupTimer.m; sourceTree = ""; };
70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; };
- 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; };
- 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; };
7F9DD8D92B2A445B005E3AFA /* ExpError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpError.swift; sourceTree = ""; };
7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; };
7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; };
8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; };
- 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; };
- 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; };
- 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; sourceTree = ""; };
- AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8EFE0319D586C1078DB926FD /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; };
+ 9196A72C11B91A52A43D6E8A /* libPods-NotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ BBE493797E97F2995E627244 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; };
BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify-NewExpensifyTests/ExpoModulesProvider.swift"; sourceTree = ""; };
- BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; sourceTree = ""; };
- BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; };
BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Italic.otf"; path = "../assets/fonts/native/ExpensifyNeue-Italic.otf"; sourceTree = ""; };
- C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; };
- C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; };
- CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; };
+ C0417E996D1C834CDF0BF0F7 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; };
D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-MediumItalic.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-MediumItalic.otf"; sourceTree = ""; };
- D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; };
- DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; sourceTree = ""; };
+ D7C206AC464C89FB4899E0AD /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; };
+ D846D749FDDC2C914007C87D /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; };
DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Bold.otf"; path = "../assets/fonts/native/ExpensifyMono-Bold.otf"; sourceTree = ""; };
DD7904292792E76D004484B4 /* RCTBootSplash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTBootSplash.h; path = NewExpensify/RCTBootSplash.h; sourceTree = ""; };
DD79042A2792E76D004484B4 /* RCTBootSplash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTBootSplash.mm; path = NewExpensify/RCTBootSplash.mm; sourceTree = ""; };
- E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; };
- E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; sourceTree = ""; };
- E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; sourceTree = ""; };
- E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; };
- E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; sourceTree = ""; };
+ E5428460BDBED9E1BA8B3599 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; };
E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Regular.otf"; path = "../assets/fonts/native/ExpensifyMono-Regular.otf"; sourceTree = ""; };
E9DF872C2525201700607FDC /* AirshipConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AirshipConfig.plist; sourceTree = ""; };
- EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugdevelopment.xcconfig"; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
- F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; };
+ EF33B19FC6A7FE676839430D /* libPods-NewExpensify-NewExpensifyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify-NewExpensifyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ EFA5CA89CC675CA3370CF89E /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; };
F0C450E92705020500FD2970 /* colors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = colors.json; path = ../colors.json; sourceTree = ""; };
F4F8A052A22040339996324B /* ExpensifyNeue-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Regular.otf"; path = "../assets/fonts/native/ExpensifyNeue-Regular.otf"; sourceTree = ""; };
- FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; };
- FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; };
+ F8839E9820F4C312BD1C9339 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -165,7 +151,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 3661A1374980E5F6804511FE /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */,
+ ACA597C323AA39404655647F /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -175,9 +161,8 @@
files = (
383643682B6D4AE2005BB9AE /* DeviceCheck.framework in Frameworks */,
E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */,
- 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */,
E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */,
- EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */,
+ 8744C5400E24E379441C04A4 /* libPods-NewExpensify.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -185,7 +170,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */,
+ 9E17CB36A6B22BDD4BE53561 /* libPods-NotificationServiceExtension.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -232,10 +217,9 @@
383643672B6D4AE2005BB9AE /* DeviceCheck.framework */,
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
- AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */,
- 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */,
- AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */,
- 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */,
+ 59A21B2405370FDDD847C813 /* libPods-NewExpensify.a */,
+ EF33B19FC6A7FE676839430D /* libPods-NewExpensify-NewExpensifyTests.a */,
+ 9196A72C11B91A52A43D6E8A /* libPods-NotificationServiceExtension.a */,
);
name = Frameworks;
sourceTree = "";
@@ -277,6 +261,7 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
+ 499B0DA92BE2A1C000CABFB0 /* PrivacyInfo.xcprivacy */,
374FB8D528A133A7000D84EF /* OriginImageRequestHandler.h */,
374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */,
F0C450E92705020500FD2970 /* colors.json */,
@@ -340,37 +325,24 @@
EC29677F0A49C2946A495A33 /* Pods */ = {
isa = PBXGroup;
children = (
- 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */,
- 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */,
- 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */,
- E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */,
- DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */,
- BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */,
- 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */,
- CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */,
- 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */,
- BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */,
- 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */,
- 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */,
- E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */,
- FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */,
- D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */,
- C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */,
- F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */,
- E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */,
- 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */,
- EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */,
- 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */,
- C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */,
- 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */,
- 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */,
- 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */,
- 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */,
- 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */,
- 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */,
- E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */,
- FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */,
- E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */,
+ 46B1FE4DE317D30C25A74C15 /* Pods-NewExpensify.debugdevelopment.xcconfig */,
+ 289D101B1119F719AAC9EB8B /* Pods-NewExpensify.debugadhoc.xcconfig */,
+ EFA5CA89CC675CA3370CF89E /* Pods-NewExpensify.debugproduction.xcconfig */,
+ F8839E9820F4C312BD1C9339 /* Pods-NewExpensify.releasedevelopment.xcconfig */,
+ 8EFE0319D586C1078DB926FD /* Pods-NewExpensify.releaseadhoc.xcconfig */,
+ 417E30386DDC804B3693037A /* Pods-NewExpensify.releaseproduction.xcconfig */,
+ E5428460BDBED9E1BA8B3599 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */,
+ C0417E996D1C834CDF0BF0F7 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */,
+ 3F17376D588832EE0C4E7E13 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */,
+ 687A6DD50C2B5D0DC530C207 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */,
+ D846D749FDDC2C914007C87D /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */,
+ 3EA3D64F00384537597190CE /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */,
+ 24454472DB373F58A96B1B5C /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */,
+ BBE493797E97F2995E627244 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */,
+ 4A39BBFB1A6AA6A0EB08878C /* Pods-NotificationServiceExtension.debugproduction.xcconfig */,
+ D7C206AC464C89FB4899E0AD /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */,
+ 48E7775E0D42D3E3F53A5B99 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */,
+ 1C839668BD5515A8ADE6B15E /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -382,13 +354,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "NewExpensifyTests" */;
buildPhases = (
- A3D1E02743106A34295E533A /* [CP] Check Pods Manifest.lock */,
+ 9775BC4DC6243DE9D85D1821 /* [CP] Check Pods Manifest.lock */,
04B99F6AA578E2A877802F05 /* [Expo] Configure project */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
- 822809AAD6B368BF9F9BA00E /* [CP] Embed Pods Frameworks */,
- 5CC6761AF98472E1C710DB80 /* [CP] Copy Pods Resources */,
+ 79927A2A23B483ABEFC728A9 /* [CP] Embed Pods Frameworks */,
+ 47017CF8C1CFE59999D45CDC /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -404,7 +376,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "NewExpensify" */;
buildPhases = (
- 468C095F6D4C79E555B55A4F /* [CP] Check Pods Manifest.lock */,
+ 0CB19F4D02046D8132BAA1CD /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
5CF45ABA52C0BB0D7B9D139A /* [Expo] Configure project */,
13B07F871A680F5B00A75B9A /* Sources */,
@@ -412,10 +384,10 @@
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- CB8E29994749C6913C3FA05D /* [CP] Embed Pods Frameworks */,
- F6E16E41F88F567A8CDD037C /* [CP] Copy Pods Resources */,
- 04A2B3BE14CFE4961BE987E8 /* [CP-User] [RNFB] Core Configuration */,
- 2D8F47B51A8E72FBA2BA4874 /* [CP-User] [RNFB] Crashlytics Configuration */,
+ 5E9C4526A040466B9CE57A2D /* [CP] Embed Pods Frameworks */,
+ FBC7D704E4E9CC08E91D7919 /* [CP] Copy Pods Resources */,
+ 9FF963998EFF771D82D473D2 /* [CP-User] [RNFB] Core Configuration */,
+ A2BE84E8C8EFD6C81A2B41F1 /* [CP-User] [RNFB] Crashlytics Configuration */,
);
buildRules = (
);
@@ -431,7 +403,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */;
buildPhases = (
- F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */,
+ 0B960DEC1F581E1EB7F1342F /* [CP] Check Pods Manifest.lock */,
7FD73C972B23CE9500420AF3 /* Sources */,
7FD73C982B23CE9500420AF3 /* Frameworks */,
7FD73C992B23CE9500420AF3 /* Resources */,
@@ -549,19 +521,6 @@
shellPath = /bin/sh;
shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n";
};
- 04A2B3BE14CFE4961BE987E8 /* [CP-User] [RNFB] Core Configuration */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
- );
- name = "[CP-User] [RNFB] Core Configuration";
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n";
- };
04B99F6AA578E2A877802F05 /* [Expo] Configure project */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -581,21 +540,29 @@
shellPath = /bin/sh;
shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify-NewExpensifyTests/expo-configure-project.sh\"\n";
};
- 2D8F47B51A8E72FBA2BA4874 /* [CP-User] [RNFB] Crashlytics Configuration */ = {
+ 0B960DEC1F581E1EB7F1342F /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
- "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
- "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt",
);
- name = "[CP-User] [RNFB] Crashlytics Configuration";
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
};
- 468C095F6D4C79E555B55A4F /* [CP] Check Pods Manifest.lock */ = {
+ 0CB19F4D02046D8132BAA1CD /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -617,7 +584,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 5CC6761AF98472E1C710DB80 /* [CP] Copy Pods Resources */ = {
+ 47017CF8C1CFE59999D45CDC /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -672,13 +639,13 @@
shellPath = /bin/sh;
shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify/expo-configure-project.sh\"\n";
};
- 822809AAD6B368BF9F9BA00E /* [CP] Embed Pods Frameworks */ = {
+ 5E9C4526A040466B9CE57A2D /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh",
+ "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework",
"${BUILT_PRODUCTS_DIR}/Turf/Turf.framework",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon",
@@ -701,38 +668,16 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- A3D1E02743106A34295E533A /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-NewExpensify-NewExpensifyTests-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- CB8E29994749C6913C3FA05D /* [CP] Embed Pods Frameworks */ = {
+ 79927A2A23B483ABEFC728A9 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh",
+ "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework",
"${BUILT_PRODUCTS_DIR}/Turf/Turf.framework",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon",
@@ -755,10 +700,10 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */ = {
+ 9775BC4DC6243DE9D85D1821 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -773,14 +718,41 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-NewExpensify-NewExpensifyTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- F6E16E41F88F567A8CDD037C /* [CP] Copy Pods Resources */ = {
+ 9FF963998EFF771D82D473D2 /* [CP-User] [RNFB] Core Configuration */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+ );
+ name = "[CP-User] [RNFB] Core Configuration";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n";
+ };
+ A2BE84E8C8EFD6C81A2B41F1 /* [CP-User] [RNFB] Crashlytics Configuration */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
+ "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+ );
+ name = "[CP-User] [RNFB] Crashlytics Configuration";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n";
+ };
+ FBC7D704E4E9CC08E91D7919 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -891,7 +863,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* DebugDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */;
+ baseConfigurationReference = E5428460BDBED9E1BA8B3599 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -921,7 +893,7 @@
};
00E356F71AD99517003FC87E /* ReleaseDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */;
+ baseConfigurationReference = 687A6DD50C2B5D0DC530C207 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
@@ -948,7 +920,7 @@
};
13B07F941A680F5B00A75B9A /* DebugDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */;
+ baseConfigurationReference = 46B1FE4DE317D30C25A74C15 /* Pods-NewExpensify.debugdevelopment.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -988,7 +960,7 @@
};
13B07F951A680F5B00A75B9A /* ReleaseDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */;
+ baseConfigurationReference = F8839E9820F4C312BD1C9339 /* Pods-NewExpensify.releasedevelopment.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -1026,7 +998,7 @@
};
7FD73CA42B23CE9500420AF3 /* DebugDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */;
+ baseConfigurationReference = 24454472DB373F58A96B1B5C /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1112,7 +1084,7 @@
};
7FD73CA52B23CE9500420AF3 /* DebugAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */;
+ baseConfigurationReference = BBE493797E97F2995E627244 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1197,7 +1169,7 @@
};
7FD73CA62B23CE9500420AF3 /* DebugProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */;
+ baseConfigurationReference = 4A39BBFB1A6AA6A0EB08878C /* Pods-NotificationServiceExtension.debugproduction.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1283,7 +1255,7 @@
};
7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */;
+ baseConfigurationReference = D7C206AC464C89FB4899E0AD /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1362,7 +1334,7 @@
};
7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */;
+ baseConfigurationReference = 48E7775E0D42D3E3F53A5B99 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1440,7 +1412,7 @@
};
7FD73CA92B23CE9500420AF3 /* ReleaseProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */;
+ baseConfigurationReference = 1C839668BD5515A8ADE6B15E /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -1741,7 +1713,7 @@
};
CF9AF93F29EE9276001FA527 /* DebugProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */;
+ baseConfigurationReference = EFA5CA89CC675CA3370CF89E /* Pods-NewExpensify.debugproduction.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -1780,7 +1752,7 @@
};
CF9AF94029EE9276001FA527 /* DebugProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */;
+ baseConfigurationReference = 3F17376D588832EE0C4E7E13 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -1886,7 +1858,7 @@
};
CF9AF94529EE927A001FA527 /* DebugAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */;
+ baseConfigurationReference = 289D101B1119F719AAC9EB8B /* Pods-NewExpensify.debugadhoc.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -1925,7 +1897,7 @@
};
CF9AF94629EE927A001FA527 /* DebugAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */;
+ baseConfigurationReference = C0417E996D1C834CDF0BF0F7 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -2025,7 +1997,7 @@
};
CF9AF94829EE928E001FA527 /* ReleaseProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */;
+ baseConfigurationReference = 417E30386DDC804B3693037A /* Pods-NewExpensify.releaseproduction.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -2062,7 +2034,7 @@
};
CF9AF94929EE928E001FA527 /* ReleaseProduction */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */;
+ baseConfigurationReference = 3EA3D64F00384537597190CE /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -2160,7 +2132,7 @@
};
CF9AF94E29EE9293001FA527 /* ReleaseAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */;
+ baseConfigurationReference = 8EFE0319D586C1078DB926FD /* Pods-NewExpensify.releaseadhoc.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
@@ -2197,7 +2169,7 @@
};
CF9AF94F29EE9293001FA527 /* ReleaseAdHoc */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */;
+ baseConfigurationReference = D846D749FDDC2C914007C87D /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index f9bc9e157b58..4120e6accb86 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -19,7 +19,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.4.69
+ 1.4.72
CFBundleSignature
????
CFBundleURLTypes
@@ -40,7 +40,7 @@
CFBundleVersion
- 1.4.69.2
+ 1.4.72.1
FullStory
OrgId
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index db5882644859..11edf545cea4 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 1.4.69
+ 1.4.72
CFBundleSignature
????
CFBundleVersion
- 1.4.69.2
+ 1.4.72.1
diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist
index cd69c5ce7b62..1f777d1739e4 100644
--- a/ios/NotificationServiceExtension/Info.plist
+++ b/ios/NotificationServiceExtension/Info.plist
@@ -11,9 +11,9 @@
CFBundleName
$(PRODUCT_NAME)
CFBundleShortVersionString
- 1.4.69
+ 1.4.72
CFBundleVersion
- 1.4.69.2
+ 1.4.72.1
NSExtension
NSExtensionPointIdentifier
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index d17d73e5eef0..d0155051fc3b 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -247,12 +247,12 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - MapboxCommon (23.9.1)
- - MapboxCoreMaps (10.16.6):
+ - MapboxCommon (23.9.2)
+ - MapboxCoreMaps (10.17.0):
- MapboxCommon (~> 23.9)
- - MapboxMaps (10.16.6):
- - MapboxCommon (= 23.9.1)
- - MapboxCoreMaps (= 10.16.6)
+ - MapboxMaps (10.17.0):
+ - MapboxCommon (= 23.9.2)
+ - MapboxCoreMaps (= 10.17.0)
- MapboxMobileEvents (= 1.0.10)
- Turf (= 2.7.0)
- MapboxMobileEvents (1.0.10)
@@ -1872,15 +1872,15 @@ PODS:
- Yoga
- RNLocalize (2.2.6):
- React-Core
- - rnmapbox-maps (10.1.11):
- - MapboxMaps (~> 10.16.4)
+ - rnmapbox-maps (10.1.20):
+ - MapboxMaps (~> 10.17.0)
- React
- React-Core
- - rnmapbox-maps/DynamicLibrary (= 10.1.11)
+ - rnmapbox-maps/DynamicLibrary (= 10.1.20)
- Turf
- - rnmapbox-maps/DynamicLibrary (10.1.11):
+ - rnmapbox-maps/DynamicLibrary (10.1.20):
- hermes-engine
- - MapboxMaps (~> 10.16.4)
+ - MapboxMaps (~> 10.17.0)
- RCT-Folly
- RCTRequired
- RCTTypeSafety
@@ -2469,9 +2469,9 @@ SPEC CHECKSUMS:
libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
lottie-ios: 3d98679b41fa6fd6aff2352b3953dbd3df8a397e
lottie-react-native: d0e530160e1a0116ab567343d843033c496d0d97
- MapboxCommon: 20466d839cc43381c44df09d19f7f794b55b9a93
- MapboxCoreMaps: c21f433decbb295874f0c2464e492166db813b56
- MapboxMaps: c3b36646b9038706bbceb5de203bcdd0f411e9d0
+ MapboxCommon: 768660d6fca8193529ecf82eb6f5f9ae7a5acdf9
+ MapboxCoreMaps: be412ff97b16aa7820922c818115a9a0d8211caa
+ MapboxMaps: 87ef0003e6db46e45e7a16939f29ae87e38e7ce2
MapboxMobileEvents: de50b3a4de180dd129c326e09cd12c8adaaa46d6
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
Onfido: 342cbecd7a4383e98dfe7f9c35e98aaece599062
@@ -2558,7 +2558,7 @@ SPEC CHECKSUMS:
RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0
RNLiveMarkdown: bfabd5938e5af5afc1e60e4e34286b17f8308184
RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81
- rnmapbox-maps: 51aee278cc2af8af9298f91a2aad7210739785b4
+ rnmapbox-maps: df8fe93dbd251f25022f4023d31bc04160d4d65c
RNPermissions: 0b61d30d21acbeafe25baaa47d9bae40a0c65216
RNReactNativeHapticFeedback: 616c35bdec7d20d4c524a7949ca9829c09e35f37
RNReanimated: 51db0fff543694d931bd3b7cab1a3b36bd86c738
@@ -2573,7 +2573,7 @@ SPEC CHECKSUMS:
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
Turf: 13d1a92d969ca0311bbc26e8356cca178ce95da2
VisionCamera: 1394a316c7add37e619c48d7aa40b38b954bf055
- Yoga: 64cd2a583ead952b0315d5135bf39e053ae9be70
+ Yoga: 1b901a6d6eeba4e8a2e8f308f708691cdb5db312
PODFILE CHECKSUM: a25a81f2b50270f0c0bd0aff2e2ebe4d0b4ec06d
diff --git a/ios/PrivacyInfo.xcprivacy b/ios/PrivacyInfo.xcprivacy
new file mode 100644
index 000000000000..db7d8b7833b4
--- /dev/null
+++ b/ios/PrivacyInfo.xcprivacy
@@ -0,0 +1,51 @@
+
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryFileTimestamp
+ NSPrivacyAccessedAPITypeReasons
+
+ C617.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryDiskSpace
+ NSPrivacyAccessedAPITypeReasons
+
+ E174.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategorySystemBootTime
+ NSPrivacyAccessedAPITypeReasons
+
+ 35F9.1
+
+
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 5962d3b29504..e2d9b6d2988b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "1.4.69-2",
+ "version": "1.4.72-1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "1.4.69-2",
+ "version": "1.4.72-1",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -39,7 +39,7 @@
"@react-navigation/native": "6.1.12",
"@react-navigation/stack": "6.3.29",
"@react-ng/bounds-observer": "^0.2.1",
- "@rnmapbox/maps": "10.1.11",
+ "@rnmapbox/maps": "10.1.20",
"@shopify/flash-list": "1.6.3",
"@storybook/addon-a11y": "^8.0.6",
"@storybook/addon-essentials": "^8.0.6",
@@ -100,7 +100,7 @@
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
- "react-native-onyx": "^2.0.35",
+ "react-native-onyx": "2.0.32",
"react-native-pager-view": "6.2.3",
"react-native-pdf": "6.7.3",
"react-native-performance": "^5.1.0",
@@ -9300,8 +9300,9 @@
}
},
"node_modules/@rnmapbox/maps": {
- "version": "10.1.11",
- "license": "MIT",
+ "version": "10.1.20",
+ "resolved": "https://registry.npmjs.org/@rnmapbox/maps/-/maps-10.1.20.tgz",
+ "integrity": "sha512-NOSQiswgPrBz5u6dCqzCpSdc2Z7ijMvGjQq7i3sA5EDd0fvwB0+wpy1A+YZFP0Ab4hKh/OQFCDqg48S4zT+INg==",
"dependencies": {
"@turf/along": "6.5.0",
"@turf/distance": "6.5.0",
@@ -31430,9 +31431,9 @@
}
},
"node_modules/react-native-onyx": {
- "version": "2.0.35",
- "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-2.0.35.tgz",
- "integrity": "sha512-eQwXQoYpv6Wv1sDrR2Otl4mW34U8OZPtlpju3OyGv1KpQSQ+2q8Ivju7AHc3DG+j2QHypUKngQghKdJ9Sm3jBQ==",
+ "version": "2.0.32",
+ "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-2.0.32.tgz",
+ "integrity": "sha512-tB9wqMJGTLOYfrfplRP+9aq5JdD8w/hV/OZsMAVH+ewbE1zLY8OymUsAsIFdF1v+cB8HhehP569JVLZmhm6bsg==",
"dependencies": {
"ascii-table": "0.0.9",
"fast-equals": "^4.0.3",
diff --git a/package.json b/package.json
index d8d2e105d0c6..c91a7a6acc4c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "1.4.69-2",
+ "version": "1.4.72-1",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
@@ -91,7 +91,7 @@
"@react-navigation/native": "6.1.12",
"@react-navigation/stack": "6.3.29",
"@react-ng/bounds-observer": "^0.2.1",
- "@rnmapbox/maps": "10.1.11",
+ "@rnmapbox/maps": "10.1.20",
"@shopify/flash-list": "1.6.3",
"@storybook/addon-a11y": "^8.0.6",
"@storybook/addon-essentials": "^8.0.6",
@@ -152,7 +152,7 @@
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
- "react-native-onyx": "2.0.35",
+ "react-native-onyx": "2.0.32",
"react-native-pager-view": "6.2.3",
"react-native-pdf": "6.7.3",
"react-native-performance": "^5.1.0",
diff --git a/patches/@rnmapbox+maps+10.1.11.patch b/patches/@rnmapbox+maps+10.1.20.patch
similarity index 91%
rename from patches/@rnmapbox+maps+10.1.11.patch
rename to patches/@rnmapbox+maps+10.1.20.patch
index 5c5b8f0b69bb..91ef182fdd68 100644
--- a/patches/@rnmapbox+maps+10.1.11.patch
+++ b/patches/@rnmapbox+maps+10.1.20.patch
@@ -1,15 +1,15 @@
diff --git a/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt b/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt
-index dbd6d0b..1d043f2 100644
+index bf149f9..2d3441b 100644
--- a/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt
+++ b/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt
-@@ -188,7 +188,7 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
-
+@@ -190,7 +190,7 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
+
private fun setInitialCamera() {
mDefaultStop?.let {
- val mapView = mMapView!!
+ val mapView = mMapView ?: return
val map = mapView.getMapboxMap()
-
+
it.setDuration(0)
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXOfflineModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXOfflineModule.m
index 1808393..ec00542 100644
@@ -19,7 +19,7 @@ index 1808393..ec00542 100644
-#import "React/RCTBridgeModule.h"
+#import
#import
-
+
@interface RCT_EXTERN_MODULE(RNMBXOfflineModule, RCTEventEmitter)
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXOfflineModuleLegacy.m b/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXOfflineModuleLegacy.m
index 550f67b..76da02d 100644
@@ -29,7 +29,7 @@ index 550f67b..76da02d 100644
-#import "React/RCTBridgeModule.h"
+#import
#import
-
+
@interface RCT_EXTERN_MODULE(RNMBXOfflineModuleLegacy, RCTEventEmitter)
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXTileStoreModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/Offline/RNMBXTileStoreModule.m
index a98e102..e43be8f 100644
@@ -39,7 +39,7 @@ index a98e102..e43be8f 100644
-#import "React/RCTBridgeModule.h"
+#import
#import
-
+
@interface RCT_EXTERN_MODULE(RNMBXTileStoreModule, NSObject)
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXCalloutViewManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXCalloutViewManager.m
index 62205d5..1db2ac4 100644
@@ -50,7 +50,7 @@ index 62205d5..1db2ac4 100644
+#import
#import
#import
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXCameraViewManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXCameraViewManager.m
index e23b10c..6a023fa 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXCameraViewManager.m
@@ -60,7 +60,7 @@ index e23b10c..6a023fa 100644
+#import
#import
#import
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXLocationModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXLocationModule.m
index 8b89774..9f85c35 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXLocationModule.m
@@ -69,7 +69,7 @@ index 8b89774..9f85c35 100644
-#import "React/RCTBridgeModule.h"
+#import
#import
-
+
@class RNMBXLocation;
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXLogging.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXLogging.m
index d7c05de..f680b86 100644
@@ -78,9 +78,9 @@ index d7c05de..f680b86 100644
@@ -1,4 +1,4 @@
-#import "React/RCTBridgeModule.h"
+#import
-
+
@interface RCT_EXTERN_MODULE(RNMBXLogging, NSObject)
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewContentManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewContentManager.m
index 72f9928..f4f5fe2 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewContentManager.m
@@ -90,7 +90,7 @@ index 72f9928..f4f5fe2 100644
+#import
#import
#import
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewManager.m
index c0ab14d..6177811 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMarkerViewManager.m
@@ -100,7 +100,7 @@ index c0ab14d..6177811 100644
+#import
#import
#import
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModule.m
index 3b0af79..e00b508 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModule.m
@@ -108,9 +108,9 @@ index 3b0af79..e00b508 100644
@@ -1,4 +1,4 @@
-#import "React/RCTBridgeModule.h"
+#import
-
+
@interface RCT_EXTERN_MODULE(RNMBXModule, NSObject)
-
+
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXPointAnnotationViewManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXPointAnnotationViewManager.m
index 6fa19e5..54d0ff9 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXPointAnnotationViewManager.m
@@ -120,7 +120,11 @@ index 6fa19e5..54d0ff9 100644
+#import
#import
#import
-
+
+diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXChangeLineOffsetsShapeAnimatorModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXChangeLineOffsetsShapeAnimatorModule.mm
+similarity index 100%
+rename from node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXChangeLineOffsetsShapeAnimatorModule.m
+rename to node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXChangeLineOffsetsShapeAnimatorModule.mm
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXMovePointShapeAnimatorModule.m b/node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXMovePointShapeAnimatorModule.mm
similarity index 100%
rename from node_modules/@rnmapbox/maps/ios/RNMBX/ShapeAnimators/RNMBXMovePointShapeAnimatorModule.m
diff --git a/src/CONST.ts b/src/CONST.ts
index afe9bdd1114e..edceb11edd85 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -63,9 +63,9 @@ const chatTypes = {
const cardActiveStates: number[] = [2, 3, 4, 7];
const onboardingChoices = {
- EMPLOYER: 'newDotEmployer',
- MANAGE_TEAM: 'newDotManageTeam',
PERSONAL_SPEND: 'newDotPersonalSpend',
+ MANAGE_TEAM: 'newDotManageTeam',
+ EMPLOYER: 'newDotEmployer',
CHAT_SPLIT: 'newDotSplitChat',
LOOKING_AROUND: 'newDotLookingAround',
};
@@ -148,6 +148,14 @@ const CONST = {
RESERVED_NAMES: ['Expensify', 'Concierge'],
},
+ GPS: {
+ // It's OK to get a cached location that is up to an hour old because the only accuracy needed is the country the user is in
+ MAX_AGE: 3600000,
+
+ // 15 seconds, don't wait too long because the server can always fall back to using the IP address
+ TIMEOUT: 15000,
+ },
+
LEGAL_NAME: {
MAX_LENGTH: 40,
},
@@ -359,6 +367,7 @@ const CONST = {
WORKFLOWS_DELAYED_SUBMISSION: 'workflowsDelayedSubmission',
SPOTNANA_TRAVEL: 'spotnanaTravel',
ACCOUNTING_ON_NEW_EXPENSIFY: 'accountingOnNewExpensify',
+ XERO_ON_NEW_EXPENSIFY: 'xeroOnNewExpensify',
},
BUTTON_STATES: {
DEFAULT: 'default',
@@ -583,6 +592,7 @@ const CONST = {
ONFIDO_PRIVACY_POLICY_URL: 'https://onfido.com/privacy/',
ONFIDO_TERMS_OF_SERVICE_URL: 'https://onfido.com/terms-of-service/',
LIST_OF_RESTRICTED_BUSINESSES: 'https://community.expensify.com/discussion/6191/list-of-restricted-businesses',
+ TRAVEL_TERMS_URL: `${USE_EXPENSIFY_URL}/travelterms`,
// Use Environment.getEnvironmentURL to get the complete URL with port number
DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:',
@@ -642,6 +652,7 @@ const CONST = {
TYPE: {
ACTIONABLE_JOIN_REQUEST: 'ACTIONABLEJOINREQUEST',
ACTIONABLE_MENTION_WHISPER: 'ACTIONABLEMENTIONWHISPER',
+ ACTIONABLE_REPORT_MENTION_WHISPER: 'ACTIONABLEREPORTMENTIONWHISPER',
ACTIONABLE_TRACK_EXPENSE_WHISPER: 'ACTIONABLETRACKEXPENSEWHISPER',
ADD_COMMENT: 'ADDCOMMENT',
APPROVED: 'APPROVED',
@@ -653,6 +664,7 @@ const CONST = {
CREATED: 'CREATED',
DELEGATE_SUBMIT: 'DELEGATESUBMIT', // OldDot Action
DELETED_ACCOUNT: 'DELETEDACCOUNT', // OldDot Action
+ DISMISSED_VIOLATION: 'DISMISSEDVIOLATION',
DONATION: 'DONATION', // OldDot Action
EXPORTED_TO_CSV: 'EXPORTEDTOCSV', // OldDot Action
EXPORTED_TO_INTEGRATION: 'EXPORTEDTOINTEGRATION', // OldDot Action
@@ -666,6 +678,7 @@ const CONST = {
MANAGER_DETACH_RECEIPT: 'MANAGERDETACHRECEIPT', // OldDot Action
MARKED_REIMBURSED: 'MARKEDREIMBURSED', // OldDot Action
MARK_REIMBURSED_FROM_INTEGRATION: 'MARKREIMBURSEDFROMINTEGRATION', // OldDot Action
+ MERGED_WITH_CASH_TRANSACTION: 'MERGEDWITHCASHTRANSACTION',
MODIFIED_EXPENSE: 'MODIFIEDEXPENSE',
MOVED: 'MOVED',
OUTDATED_BANK_ACCOUNT: 'OUTDATEDBANKACCOUNT', // OldDot Action
@@ -779,6 +792,10 @@ const CONST = {
ACTIONABLE_TRACK_EXPENSE_WHISPER_RESOLUTION: {
NOTHING: 'nothing',
},
+ ACTIONABLE_REPORT_MENTION_WHISPER_RESOLUTION: {
+ CREATE: 'created',
+ NOTHING: 'nothing',
+ },
ACTIONABLE_MENTION_JOIN_WORKSPACE_RESOLUTION: {
ACCEPT: 'accept',
DECLINE: 'decline',
@@ -840,7 +857,7 @@ const CONST = {
},
RESERVED_ROOM_NAMES: ['#admins', '#announce'],
MAX_PREVIEW_AVATARS: 4,
- MAX_ROOM_NAME_LENGTH: 79,
+ MAX_ROOM_NAME_LENGTH: 99,
LAST_MESSAGE_TEXT_MAX_LENGTH: 200,
OWNER_EMAIL_FAKE: '__FAKE__',
OWNER_ACCOUNT_ID_FAKE: 0,
@@ -915,6 +932,15 @@ const CONST = {
SEARCH_OPTION_LIST_DEBOUNCE_TIME: 300,
RESIZE_DEBOUNCE_TIME: 100,
},
+ SEARCH_TABLE_COLUMNS: {
+ DATE: 'date',
+ MERCHANT: 'merchant',
+ FROM: 'from',
+ TO: 'to',
+ TOTAL: 'total',
+ TYPE: 'type',
+ ACTION: 'action',
+ },
PRIORITY_MODE: {
GSD: 'gsd',
DEFAULT: 'default',
@@ -1123,6 +1149,11 @@ const CONST = {
URL: 'url',
},
+ INPUT_AUTOGROW_DIRECTION: {
+ LEFT: 'left',
+ RIGHT: 'right',
+ },
+
YOUR_LOCATION_TEXT: 'Your Location',
ATTACHMENT_MESSAGE_TEXT: '[Attachment]',
@@ -1250,15 +1281,14 @@ const CONST = {
SYNC_CUSTOMERS: 'syncCustomers',
SYNC_LOCATIONS: 'syncLocations',
SYNC_TAX: 'syncTax',
- PREFERRED_EXPORTER: 'exporter',
+ EXPORT: 'export',
EXPORT_DATE: 'exportDate',
- OUT_OF_POCKET_EXPENSES: 'outOfPocketExpenses',
- EXPORT_INVOICE: 'exportInvoice',
- EXPORT_ENTITY: 'exportEntity',
- EXPORT_ACCOUNT: 'exportAccount',
- EXPORT_ACCOUNT_PAYABLE: 'exportAccountPayable',
- EXPORT_COMPANY_CARD_ACCOUNT: 'exportCompanyCardAccount',
- EXPORT_COMPANY_CARD: 'exportCompanyCard',
+ NON_REIMBURSABLE_EXPENSES_ACCOUNT: 'nonReimbursableExpensesAccount',
+ NON_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'nonReimbursableExpensesExportDestination',
+ REIMBURSABLE_EXPENSES_ACCOUNT: 'reimbursableExpensesAccount',
+ REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'reimbursableExpensesExportDestination',
+ NON_REIMBURSABLE_BILL_DEFAULT_VENDOR: 'nonReimbursableBillDefaultVendor',
+ RECEIVABLE_ACCOUNT: 'receivableAccount',
AUTO_SYNC: 'autoSync',
SYNC_PEOPLE: 'syncPeople',
AUTO_CREATE_VENDOR: 'autoCreateVendor',
@@ -1267,15 +1297,41 @@ const CONST = {
},
XERO_CONFIG: {
+ AUTO_SYNC: 'autoSync',
+ SYNC: 'sync',
+ IMPORT_CUSTOMERS: 'importCustomers',
IMPORT_TAX_RATES: 'importTaxRates',
+ IMPORT_TRACKING_CATEGORIES: 'importTrackingCategories',
+ MAPPINGS: 'mappings',
+ TRACKING_CATEGORY_PREFIX: 'trackingCategory_',
+ TRACKING_CATEGORY_FIELDS: {
+ COST_CENTERS: 'cost centers',
+ REGION: 'region',
+ },
+ TRACKING_CATEGORY_OPTIONS: {
+ DEFAULT: 'DEFAULT',
+ TAG: 'TAG',
+ },
},
- QUICKBOOKS_OUT_OF_POCKET_EXPENSE_ACCOUNT_TYPE: {
+ QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE: {
VENDOR_BILL: 'bill',
CHECK: 'check',
JOURNAL_ENTRY: 'journal_entry',
},
+ QUICKBOOKS_EXPORT_DATE: {
+ LAST_EXPENSE: 'LAST_EXPENSE',
+ REPORT_EXPORTED: 'REPORT_EXPORTED',
+ REPORT_SUBMITTED: 'REPORT_SUBMITTED',
+ },
+
+ QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE: {
+ CREDIT_CARD: 'credit_card',
+ DEBIT_CARD: 'debit_card',
+ VENDOR_BILL: 'bill',
+ },
+
ACCOUNT_ID: {
ACCOUNTING: Number(Config?.EXPENSIFY_ACCOUNT_ID_ACCOUNTING ?? 9645353),
ADMIN: Number(Config?.EXPENSIFY_ACCOUNT_ID_ADMIN ?? -1),
@@ -1830,7 +1886,7 @@ const CONST = {
CARD_NUMBER: /^[0-9]{15,16}$/,
CARD_SECURITY_CODE: /^[0-9]{3,4}$/,
CARD_EXPIRATION_DATE: /^(0[1-9]|1[0-2])([^0-9])?([0-9]{4}|([0-9]{2}))$/,
- ROOM_NAME: /^#[\p{Ll}0-9-]{1,80}$/u,
+ ROOM_NAME: /^#[\p{Ll}0-9-]{1,100}$/u,
// eslint-disable-next-line max-len, no-misleading-character-class
EMOJI: /[\p{Extended_Pictographic}\u200d\u{1f1e6}-\u{1f1ff}\u{1f3fb}-\u{1f3ff}\u{e0020}-\u{e007f}\u20E3\uFE0F]|[#*0-9]\uFE0F?\u20E3/gu,
@@ -3403,11 +3459,6 @@ const CONST = {
},
TAB_SEARCH: {
ALL: 'all',
- // @TODO: Uncomment when the queries below are implemented
- // SHARED: 'shared',
- // DRAFTS: 'drafts',
- // WAITING_ON_YOU: 'waitingOnYou',
- // FINISHED: 'finished',
},
STATUS_TEXT_MAX_LENGTH: 100,
@@ -4103,7 +4154,7 @@ const CONST = {
"unit": "km"
},
"CHF": {
- "rate": 100,
+ "rate": 70,
"unit": "km"
},
"CLP": {
@@ -4143,7 +4194,7 @@ const CONST = {
"unit": "km"
},
"DKK": {
- "rate": 673,
+ "rate": 379,
"unit": "km"
},
"DOP": {
@@ -4171,7 +4222,7 @@ const CONST = {
"unit": "km"
},
"EUR": {
- "rate": 3,
+ "rate": 30,
"unit": "km"
},
"FJD": {
@@ -4239,7 +4290,7 @@ const CONST = {
"unit": "km"
},
"ILS": {
- "rate": 356,
+ "rate": 540,
"unit": "km"
},
"INR": {
@@ -4387,7 +4438,7 @@ const CONST = {
"unit": "km"
},
"MXN": {
- "rate": 2219,
+ "rate": 93,
"unit": "km"
},
"MYR": {
@@ -4411,7 +4462,7 @@ const CONST = {
"unit": "km"
},
"NOK": {
- "rate": 917,
+ "rate": 350,
"unit": "km"
},
"NPR": {
@@ -4419,7 +4470,7 @@ const CONST = {
"unit": "km"
},
"NZD": {
- "rate": 151,
+ "rate": 95,
"unit": "km"
},
"OMR": {
@@ -4447,7 +4498,7 @@ const CONST = {
"unit": "km"
},
"PLN": {
- "rate": 415,
+ "rate": 89,
"unit": "km"
},
"PYG": {
@@ -4491,7 +4542,7 @@ const CONST = {
"unit": "km"
},
"SEK": {
- "rate": 917,
+ "rate": 250,
"unit": "km"
},
"SGD": {
@@ -4635,7 +4686,7 @@ const CONST = {
"unit": "km"
},
"ZAR": {
- "rate": 1588,
+ "rate": 464,
"unit": "km"
},
"ZMK": {
@@ -4656,18 +4707,6 @@ const CONST = {
},
},
- QUICKBOOKS_EXPORT_DATE: {
- LAST_EXPENSE: 'LAST_EXPENSE',
- REPORT_EXPORTED: 'REPORT_EXPORTED',
- REPORT_SUBMITTED: 'REPORT_SUBMITTED',
- },
-
- QUICKBOOKS_EXPORT_COMPANY_CARD_ACCOUNT_TYPE: {
- CREDIT_CARD: 'credit_card',
- DEBIT_CARD: 'debit_card',
- VENDOR_BILL: 'bill',
- },
-
SESSION_STORAGE_KEYS: {
INITIAL_URL: 'INITIAL_URL',
},
@@ -4694,18 +4733,31 @@ const CONST = {
MAX_TAX_RATE_INTEGER_PLACES: 4,
MAX_TAX_RATE_DECIMAL_PLACES: 4,
+ DOWNLOADS_PATH: '/Downloads',
+ NEW_EXPENSIFY_PATH: '/New Expensify',
+
+ ENVIRONMENT_SUFFIX: {
+ DEV: ' Dev',
+ ADHOC: ' AdHoc',
+ },
+
SEARCH_TRANSACTION_TYPE: {
CASH: 'cash',
CARD: 'card',
DISTANCE: 'distance',
},
+
+ SEARCH_DATA_TYPES: {
+ TRANSACTION: 'transaction',
+ },
} as const;
type Country = keyof typeof CONST.ALL_COUNTRIES;
type IOUType = ValueOf;
type IOUAction = ValueOf;
+type IOURequestType = ValueOf;
-export type {Country, IOUAction, IOUType, RateAndUnit, OnboardingPurposeType};
+export type {Country, IOUAction, IOUType, RateAndUnit, OnboardingPurposeType, IOURequestType};
export default CONST;
diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts
index 1a27d691e2ef..804c8dadd553 100755
--- a/src/ONYXKEYS.ts
+++ b/src/ONYXKEYS.ts
@@ -282,6 +282,9 @@ const ONYXKEYS = {
/** Onboarding Purpose selected by the user during Onboarding flow */
ONBOARDING_PURPOSE_SELECTED: 'onboardingPurposeSelected',
+ /** Onboarding Purpose selected by the user during Onboarding flow */
+ ONBOARDING_ADMINS_CHAT_REPORT_ID: 'onboardingAdminsChatReportID',
+
// Max width supported for HTML