config(project): 更新项目配置和资源文件

- 添加 .gitignore 文件忽略 IDE 和 Xcode 用户特定文件
- 重命名应用图标文件从 app_logo.png 到 logo.png
- 更新 GoogleService-Info.plist 中的 Firebase 配置信息
- 修改 MacroDefine.h 中的 NowUserId 常量值
- 注释掉 MainOldViewController.m 中的 home2 和 noti2 菜单项
- 更新项目文件名、Bundle ID 和显示名称等项目配置
- 在 README.md 中添加通讯录权限维护说明和图标隐藏说明
- 更新 Xcode scheme 配置中的应用名称
This commit is contained in:
JiaJun
2026-07-30 17:22:20 +08:00
parent 5b116ab2eb
commit e3dfd93fad
14 changed files with 126 additions and 33 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/.idea
xcuserdata/
*.xcuserstate

View File

@@ -1,6 +1,96 @@
# ShenQi # ShenQi
## 通讯录权限维护说明
当前 iOS App 的通讯录权限获取逻辑没有被代码屏蔽,但是否真正触发,受服务端配置控制。
- 当前代码常量 `NowUserId``279`
- 配置接口为 `GET https://api.liulao.top/api/system/applicationConf?userId=279`
- 2026-05-14 核对结果:
- `contactApplyMode = 1`
- `isUse = 1`
- 结论:
- 当前线上配置下,通讯录权限申请是开启状态
- 如果后续后台把 `contactApplyMode` 改成非 `1`,代码会跳过通讯录权限申请和联系人上传流程
相关代码位置:
- `ShenQi/MacroDefine.h`
- `NowUserId`
- `ConfigURL`
- `ContactsURL`
- `ShenQi/LaunchViewController.m`
- 拉取配置后,如果 `contactApplyMode == 1`,会调用 `AppDelegate` 的权限检查逻辑
- `ShenQi/AppDelegate.m`
- `applicationDidBecomeActive:`
- `setupAlertContact`
- 负责首次权限申请和拒绝后的设置页弹窗提醒
- `ShenQi/MainOldViewController.m`
- `setupAddContactData`
- `refreshMayknowFriendData`
- `uploadContactsData:`
- 负责在主页面进入后读取联系人并上传到 `/api/customer/customers`
- `ShenQi.xcodeproj/project.pbxproj`
- 已配置 `NSContactsUsageDescription`
排查建议:
1. 先确认 `NowUserId` 是否被改动。
2. 再请求配置接口,确认 `contactApplyMode` 当前值。
3. 如果 `contactApplyMode == 1` 但设备仍不弹权限框,再检查设备是否已经拒绝过权限,以及系统设置里该 App 的通讯录权限状态。
## Icon Hide Notes
This project currently hides the `home2` and `noti2` menu icons by commenting out their menu registration code.
File location:
- `ShenQi/MainOldViewController.m`
Commented code location:
- In `- (void)viewDidLoad`, inside the `menuArray` build section.
- `home2` hide code:
- `height = height + 60;`
- `LinkConfig *config = [[LinkConfig alloc] init];`
- `config.isGoBack = YES;`
- `config.icon = @"home2";`
- `config.name = @"HOME2";`
- `config.linkUrl = appDelegate.mainURLString;`
- `[menuArray addObject:config];`
- `noti2` hide code:
- `height = height + 70;`
- `[menuArray addObject:[NSNumber numberWithInteger:DSWebMenuNotiType]];`
Why it does not show now:
- `home2` and `noti2` are only displayed after being added into `menuArray`.
- The add-to-`menuArray` code is commented out, so they are not rendered when entering the app.
How to restore later:
1. Open `ShenQi/MainOldViewController.m`.
2. Find the `// 回到主页` block and uncomment the `home2` related lines.
3. Find the `// 推送中心按钮` block and uncomment the `noti2` related lines.
4. Keep the matching `height = ...` lines restored together, otherwise the menu height will be inconsistent.
Current change date:
- 2026-04-30
可以把app的这个按钮去掉吗? 苹果和安卓
WE1WIN - we1win.hfcapital.top
U8888AUD - u88.hfcapital.top
AFB77AU - afb77au.hfcapital.top
GG66au - gg66au.hfcapital.top
BB8AU - bb8au.hfcapital.top
BE9AU - be9au.hfcapital.top
UU33AU - uu33au.hfcapital.top
AA7AU - www.aa7au.top
BNG1AU - www.bng1au.top
XOXOAU8 - xoxau.mgmhotram.top
## Getting started ## Getting started

View File

@@ -103,7 +103,7 @@
20B317F52CD4BA6700B29987 /* NSObject+YYModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+YYModel.m"; sourceTree = "<group>"; }; 20B317F52CD4BA6700B29987 /* NSObject+YYModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+YYModel.m"; sourceTree = "<group>"; };
20B317F62CD4BA6700B29987 /* YYClassInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYClassInfo.m; sourceTree = "<group>"; }; 20B317F62CD4BA6700B29987 /* YYClassInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYClassInfo.m; sourceTree = "<group>"; };
20B317F72CD4BA6700B29987 /* NSObject+YYModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+YYModel.h"; sourceTree = "<group>"; }; 20B317F72CD4BA6700B29987 /* NSObject+YYModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+YYModel.h"; sourceTree = "<group>"; };
20B61C7829DC008500CE7946 /* TESTAPP.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TESTAPP.app; sourceTree = BUILT_PRODUCTS_DIR; }; 20B61C7829DC008500CE7946 /* jpot9.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jpot9.app; sourceTree = BUILT_PRODUCTS_DIR; };
20B61C7B29DC008500CE7946 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; 20B61C7B29DC008500CE7946 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
20B61C7C29DC008500CE7946 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; 20B61C7C29DC008500CE7946 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
20B61C8529DC008500CE7946 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; 20B61C8529DC008500CE7946 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
@@ -253,7 +253,7 @@
20B61C7929DC008500CE7946 /* Products */ = { 20B61C7929DC008500CE7946 /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
20B61C7829DC008500CE7946 /* TESTAPP.app */, 20B61C7829DC008500CE7946 /* jpot9.app */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -378,7 +378,7 @@
); );
name = ShenQi; name = ShenQi;
productName = ShenQi; productName = ShenQi;
productReference = 20B61C7829DC008500CE7946 /* TESTAPP.app */; productReference = 20B61C7829DC008500CE7946 /* jpot9.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
/* End PBXNativeTarget section */ /* End PBXNativeTarget section */
@@ -699,7 +699,7 @@
); );
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = ShenQi/Info.plist; INFOPLIST_FILE = ShenQi/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = pantas33; INFOPLIST_KEY_CFBundleDisplayName = jpot9;
INFOPLIST_KEY_NSAppleMusicUsageDescription = "需要访问相册权限用于照片上传,应用不会上传和存储您的照片"; INFOPLIST_KEY_NSAppleMusicUsageDescription = "需要访问相册权限用于照片上传,应用不会上传和存储您的照片";
INFOPLIST_KEY_NSCameraUsageDescription = "需要相机权限用于拍照上传,应用不会上传和存储您的照片"; INFOPLIST_KEY_NSCameraUsageDescription = "需要相机权限用于拍照上传,应用不会上传和存储您的照片";
INFOPLIST_KEY_NSContactsUsageDescription = "用于匹配您的好友"; INFOPLIST_KEY_NSContactsUsageDescription = "用于匹配您的好友";
@@ -722,8 +722,8 @@
"$(PROJECT_DIR)/ShenQi", "$(PROJECT_DIR)/ShenQi",
); );
MARKETING_VERSION = 4.2; MARKETING_VERSION = 4.2;
PRODUCT_BUNDLE_IDENTIFIER = noti.pantas3342; PRODUCT_BUNDLE_IDENTIFIER = noti.jpot9;
PRODUCT_NAME = TESTAPP; PRODUCT_NAME = jpot9;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
@@ -753,7 +753,7 @@
); );
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = ShenQi/Info.plist; INFOPLIST_FILE = ShenQi/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = pantas33; INFOPLIST_KEY_CFBundleDisplayName = jpot9;
INFOPLIST_KEY_NSAppleMusicUsageDescription = "需要访问相册权限用于照片上传,应用不会上传和存储您的照片"; INFOPLIST_KEY_NSAppleMusicUsageDescription = "需要访问相册权限用于照片上传,应用不会上传和存储您的照片";
INFOPLIST_KEY_NSCameraUsageDescription = "需要相机权限用于拍照上传,应用不会上传和存储您的照片"; INFOPLIST_KEY_NSCameraUsageDescription = "需要相机权限用于拍照上传,应用不会上传和存储您的照片";
INFOPLIST_KEY_NSContactsUsageDescription = "用于匹配您的好友"; INFOPLIST_KEY_NSContactsUsageDescription = "用于匹配您的好友";
@@ -776,8 +776,8 @@
"$(PROJECT_DIR)/ShenQi", "$(PROJECT_DIR)/ShenQi",
); );
MARKETING_VERSION = 4.2; MARKETING_VERSION = 4.2;
PRODUCT_BUNDLE_IDENTIFIER = noti.pantas3342; PRODUCT_BUNDLE_IDENTIFIER = noti.jpot9;
PRODUCT_NAME = TESTAPP; PRODUCT_NAME = jpot9;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;

View File

@@ -30,7 +30,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>
@@ -61,7 +61,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>
@@ -80,7 +80,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>

View File

@@ -15,7 +15,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>
@@ -45,7 +45,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>
@@ -62,7 +62,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "20B61C7729DC008500CE7946" BlueprintIdentifier = "20B61C7729DC008500CE7946"
BuildableName = "TESTAPP.app" BuildableName = "ANTBET.app"
BlueprintName = "ShenQi" BlueprintName = "ShenQi"
ReferencedContainer = "container:ShenQi.xcodeproj"> ReferencedContainer = "container:ShenQi.xcodeproj">
</BuildableReference> </BuildableReference>

View File

@@ -1,7 +1,7 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "app_logo.png", "filename" : "logo.png",
"idiom" : "universal", "idiom" : "universal",
"platform" : "ios", "platform" : "ios",
"size" : "1024x1024" "size" : "1024x1024"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -1,7 +1,7 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "app_logo.png", "filename" : "logo.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -3,17 +3,17 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>API_KEY</key> <key>API_KEY</key>
<string>AIzaSyAf2aoBSP5qZE6A4XVkCTGL_LayRqAnhCY</string> <string>AIzaSyDaNgTnrrFkK5b9i3DyIu2p-M1E2Vewlz8</string>
<key>GCM_SENDER_ID</key> <key>GCM_SENDER_ID</key>
<string>541726336017</string> <string>324671180568</string>
<key>PLIST_VERSION</key> <key>PLIST_VERSION</key>
<string>1</string> <string>1</string>
<key>BUNDLE_ID</key> <key>BUNDLE_ID</key>
<string>noti.pantas3342</string> <string>noti.jpot9</string>
<key>PROJECT_ID</key> <key>PROJECT_ID</key>
<string>pantas3342</string> <string>jpot9-d02d7</string>
<key>STORAGE_BUCKET</key> <key>STORAGE_BUCKET</key>
<string>pantas3342.firebasestorage.app</string> <string>jpot9-d02d7.firebasestorage.app</string>
<key>IS_ADS_ENABLED</key> <key>IS_ADS_ENABLED</key>
<false></false> <false></false>
<key>IS_ANALYTICS_ENABLED</key> <key>IS_ANALYTICS_ENABLED</key>
@@ -25,6 +25,6 @@
<key>IS_SIGNIN_ENABLED</key> <key>IS_SIGNIN_ENABLED</key>
<true></true> <true></true>
<key>GOOGLE_APP_ID</key> <key>GOOGLE_APP_ID</key>
<string>1:541726336017:ios:4df0bdf58876ea8e7b7db0</string> <string>1:324671180568:ios:60ef228c6713b81230986d</string>
</dict> </dict>
</plist> </plist>

View File

@@ -228,7 +228,7 @@
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define NowUserId @"142" #define NowUserId @"309"
#endif /* MacroDefine_h */ #endif /* MacroDefine_h */

View File

@@ -92,13 +92,13 @@
// height = 60; // height = 60;
// [menuArray addObject:[NSNumber numberWithInteger:DSWebMenuHomeType]]; // [menuArray addObject:[NSNumber numberWithInteger:DSWebMenuHomeType]];
// //
height = height + 60; // height = height + 60;
LinkConfig *config = [[LinkConfig alloc] init]; // LinkConfig *config = [[LinkConfig alloc] init];
config.isGoBack = YES; // config.isGoBack = YES;
config.icon = @"home2"; // config.icon = @"home2";
config.name = @"HOME2"; // config.name = @"HOME2";
config.linkUrl = appDelegate.mainURLString; // config.linkUrl = appDelegate.mainURLString;
[menuArray addObject:config]; // [menuArray addObject:config];
// //
// if (!ISNULLSTR(appDelegate.data.linkConfig)) { // if (!ISNULLSTR(appDelegate.data.linkConfig)) {
@@ -130,8 +130,8 @@
// height = height + 70; // height = height + 70;
// [menuArray addObject:[NSNumber numberWithInteger:DSWebMenuRefreshType]]; // [menuArray addObject:[NSNumber numberWithInteger:DSWebMenuRefreshType]];
// //
height = height + 70; // height = height + 70;
[menuArray addObject:[NSNumber numberWithInteger:DSWebMenuNotiType]]; // [menuArray addObject:[NSNumber numberWithInteger:DSWebMenuNotiType]];
// } // }
self.webMenuCollectionView.shareArray = menuArray; self.webMenuCollectionView.shareArray = menuArray;