I have [foreignApps] array when creating a new app, does the account need to opt in to the foreign app? Or opting to the newly created app will just take care of this?
The foreign app arrays allow your current app to access (in read only) the state of other apps.
The account making the application call does not need to have opted in any of those apps.
More generally, opt in to an app is only required when you want to store local state.