Skip to content

Commit 44f0014

Browse files
authoredAug 27, 2024
Project setup to facilitate external contributions (#41)
1 parent 4f08827 commit 44f0014

File tree

5 files changed

+266
-6
lines changed

5 files changed

+266
-6
lines changed
 

‎.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,8 @@ xcuserdata/
2525
*.dSYM.zip
2626
*.dSYM
2727

28-
2928
PiHoleStats.xcodeproj/xcuserdata
29+
30+
# Generated Config Files
31+
32+
TeamID.xcconfig

‎PiHoleStats.xcodeproj/project.pbxproj

+195-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 52;
6+
objectVersion = 54;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -75,6 +75,9 @@
7575
31CC8173249F8072008DA24C /* DataMigrationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataMigrationManager.swift; sourceTree = "<group>"; };
7676
31CC8175249FA290008DA24C /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
7777
31DC927824D7103500C6E8F7 /* QRCodeGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeGenerator.swift; sourceTree = "<group>"; };
78+
F40B653C2C7E0D5B0079F743 /* Main.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Main.xcconfig; sourceTree = "<group>"; };
79+
F40B653D2C7E0D5B0079F743 /* OpenSource.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = OpenSource.xcconfig; sourceTree = "<group>"; };
80+
F40B653F2C7E0D8C0079F743 /* TeamID.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = TeamID.xcconfig; sourceTree = "<group>"; };
7881
/* End PBXFileReference section */
7982

8083
/* Begin PBXFrameworksBuildPhase section */
@@ -192,6 +195,7 @@
192195
319084BA2454920700D47980 /* PiHoleStats */ = {
193196
isa = PBXGroup;
194197
children = (
198+
F40B653E2C7E0D5B0079F743 /* Config */,
195199
31ABD136247B14A700D76618 /* Core */,
196200
3160C4F3247875C100FAB226 /* Controllers */,
197201
313278EF246A08B900520124 /* ViewModel */,
@@ -226,6 +230,16 @@
226230
path = Core;
227231
sourceTree = "<group>";
228232
};
233+
F40B653E2C7E0D5B0079F743 /* Config */ = {
234+
isa = PBXGroup;
235+
children = (
236+
F40B653C2C7E0D5B0079F743 /* Main.xcconfig */,
237+
F40B653D2C7E0D5B0079F743 /* OpenSource.xcconfig */,
238+
F40B653F2C7E0D8C0079F743 /* TeamID.xcconfig */,
239+
);
240+
path = Config;
241+
sourceTree = "<group>";
242+
};
229243
/* End PBXGroup section */
230244

231245
/* Begin PBXNativeTarget section */
@@ -372,6 +386,7 @@
372386
/* Begin XCBuildConfiguration section */
373387
319084C92454920900D47980 /* Debug */ = {
374388
isa = XCBuildConfiguration;
389+
baseConfigurationReference = F40B653D2C7E0D5B0079F743 /* OpenSource.xcconfig */;
375390
buildSettings = {
376391
ALWAYS_SEARCH_USER_PATHS = NO;
377392
CLANG_ANALYZER_NONNULL = YES;
@@ -432,6 +447,7 @@
432447
};
433448
319084CA2454920900D47980 /* Release */ = {
434449
isa = XCBuildConfiguration;
450+
baseConfigurationReference = F40B653D2C7E0D5B0079F743 /* OpenSource.xcconfig */;
435451
buildSettings = {
436452
ALWAYS_SEARCH_USER_PATHS = NO;
437453
CLANG_ANALYZER_NONNULL = YES;
@@ -494,7 +510,6 @@
494510
COMBINE_HIDPI_IMAGES = YES;
495511
CURRENT_PROJECT_VERSION = 19;
496512
DEVELOPMENT_ASSET_PATHS = "\"PiHoleStats/Preview Content\"";
497-
DEVELOPMENT_TEAM = B2RUA6XMHC;
498513
ENABLE_HARDENED_RUNTIME = YES;
499514
ENABLE_PREVIEWS = YES;
500515
INFOPLIST_FILE = PiHoleStats/Info.plist;
@@ -504,7 +519,7 @@
504519
);
505520
MACOSX_DEPLOYMENT_TARGET = 10.15;
506521
MARKETING_VERSION = 2.3.5;
507-
PRODUCT_BUNDLE_IDENTIFIER = dev.bunn.holestats;
522+
PRODUCT_BUNDLE_IDENTIFIER = "dev.bunn.holestats$(SAMPLE_CODE_DISAMBIGUATOR)";
508523
PRODUCT_NAME = "Pi Stats";
509524
PROVISIONING_PROFILE_SPECIFIER = "";
510525
SWIFT_OBJC_BRIDGING_HEADER = "PiHoleStats/Util/PiHoleStats-Bridging-Header.h";
@@ -524,7 +539,6 @@
524539
COMBINE_HIDPI_IMAGES = YES;
525540
CURRENT_PROJECT_VERSION = 19;
526541
DEVELOPMENT_ASSET_PATHS = "\"PiHoleStats/Preview Content\"";
527-
DEVELOPMENT_TEAM = B2RUA6XMHC;
528542
ENABLE_HARDENED_RUNTIME = YES;
529543
ENABLE_PREVIEWS = YES;
530544
INFOPLIST_FILE = PiHoleStats/Info.plist;
@@ -534,22 +548,196 @@
534548
);
535549
MACOSX_DEPLOYMENT_TARGET = 10.15;
536550
MARKETING_VERSION = 2.3.5;
537-
PRODUCT_BUNDLE_IDENTIFIER = dev.bunn.holestats;
551+
PRODUCT_BUNDLE_IDENTIFIER = "dev.bunn.holestats$(SAMPLE_CODE_DISAMBIGUATOR)";
538552
PRODUCT_NAME = "Pi Stats";
539553
PROVISIONING_PROFILE_SPECIFIER = "";
540554
SWIFT_OBJC_BRIDGING_HEADER = "PiHoleStats/Util/PiHoleStats-Bridging-Header.h";
541555
SWIFT_VERSION = 5.0;
542556
};
543557
name = Release;
544558
};
559+
F40B65402C7E0DC60079F743 /* Debug-Private */ = {
560+
isa = XCBuildConfiguration;
561+
baseConfigurationReference = F40B653C2C7E0D5B0079F743 /* Main.xcconfig */;
562+
buildSettings = {
563+
ALWAYS_SEARCH_USER_PATHS = NO;
564+
CLANG_ANALYZER_NONNULL = YES;
565+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
566+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
567+
CLANG_CXX_LIBRARY = "libc++";
568+
CLANG_ENABLE_MODULES = YES;
569+
CLANG_ENABLE_OBJC_ARC = YES;
570+
CLANG_ENABLE_OBJC_WEAK = YES;
571+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
572+
CLANG_WARN_BOOL_CONVERSION = YES;
573+
CLANG_WARN_COMMA = YES;
574+
CLANG_WARN_CONSTANT_CONVERSION = YES;
575+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
576+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
577+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
578+
CLANG_WARN_EMPTY_BODY = YES;
579+
CLANG_WARN_ENUM_CONVERSION = YES;
580+
CLANG_WARN_INFINITE_RECURSION = YES;
581+
CLANG_WARN_INT_CONVERSION = YES;
582+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
583+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
584+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
585+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
586+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
587+
CLANG_WARN_STRICT_PROTOTYPES = YES;
588+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
589+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
590+
CLANG_WARN_UNREACHABLE_CODE = YES;
591+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
592+
COPY_PHASE_STRIP = NO;
593+
DEBUG_INFORMATION_FORMAT = dwarf;
594+
ENABLE_STRICT_OBJC_MSGSEND = YES;
595+
ENABLE_TESTABILITY = YES;
596+
GCC_C_LANGUAGE_STANDARD = gnu11;
597+
GCC_DYNAMIC_NO_PIC = NO;
598+
GCC_NO_COMMON_BLOCKS = YES;
599+
GCC_OPTIMIZATION_LEVEL = 0;
600+
GCC_PREPROCESSOR_DEFINITIONS = (
601+
"DEBUG=1",
602+
"$(inherited)",
603+
);
604+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
605+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
606+
GCC_WARN_UNDECLARED_SELECTOR = YES;
607+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
608+
GCC_WARN_UNUSED_FUNCTION = YES;
609+
GCC_WARN_UNUSED_VARIABLE = YES;
610+
MACOSX_DEPLOYMENT_TARGET = 10.15;
611+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
612+
MTL_FAST_MATH = YES;
613+
ONLY_ACTIVE_ARCH = YES;
614+
SDKROOT = macosx;
615+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
616+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
617+
};
618+
name = "Debug-Private";
619+
};
620+
F40B65412C7E0DC60079F743 /* Debug-Private */ = {
621+
isa = XCBuildConfiguration;
622+
buildSettings = {
623+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
624+
CLANG_ENABLE_MODULES = YES;
625+
CODE_SIGN_ENTITLEMENTS = PiHoleStats/PiHoleStats.entitlements;
626+
CODE_SIGN_IDENTITY = "Apple Development";
627+
CODE_SIGN_STYLE = Automatic;
628+
COMBINE_HIDPI_IMAGES = YES;
629+
CURRENT_PROJECT_VERSION = 19;
630+
DEVELOPMENT_ASSET_PATHS = "\"PiHoleStats/Preview Content\"";
631+
ENABLE_HARDENED_RUNTIME = YES;
632+
ENABLE_PREVIEWS = YES;
633+
INFOPLIST_FILE = PiHoleStats/Info.plist;
634+
LD_RUNPATH_SEARCH_PATHS = (
635+
"$(inherited)",
636+
"@executable_path/../Frameworks",
637+
);
638+
MACOSX_DEPLOYMENT_TARGET = 10.15;
639+
MARKETING_VERSION = 2.3.5;
640+
PRODUCT_BUNDLE_IDENTIFIER = dev.bunn.holestats;
641+
PRODUCT_NAME = "Pi Stats";
642+
PROVISIONING_PROFILE_SPECIFIER = "";
643+
SWIFT_OBJC_BRIDGING_HEADER = "PiHoleStats/Util/PiHoleStats-Bridging-Header.h";
644+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
645+
SWIFT_VERSION = 5.0;
646+
};
647+
name = "Debug-Private";
648+
};
649+
F40B65422C7E0DCB0079F743 /* Release-Private */ = {
650+
isa = XCBuildConfiguration;
651+
baseConfigurationReference = F40B653C2C7E0D5B0079F743 /* Main.xcconfig */;
652+
buildSettings = {
653+
ALWAYS_SEARCH_USER_PATHS = NO;
654+
CLANG_ANALYZER_NONNULL = YES;
655+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
656+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
657+
CLANG_CXX_LIBRARY = "libc++";
658+
CLANG_ENABLE_MODULES = YES;
659+
CLANG_ENABLE_OBJC_ARC = YES;
660+
CLANG_ENABLE_OBJC_WEAK = YES;
661+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
662+
CLANG_WARN_BOOL_CONVERSION = YES;
663+
CLANG_WARN_COMMA = YES;
664+
CLANG_WARN_CONSTANT_CONVERSION = YES;
665+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
666+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
667+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
668+
CLANG_WARN_EMPTY_BODY = YES;
669+
CLANG_WARN_ENUM_CONVERSION = YES;
670+
CLANG_WARN_INFINITE_RECURSION = YES;
671+
CLANG_WARN_INT_CONVERSION = YES;
672+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
673+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
674+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
675+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
676+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
677+
CLANG_WARN_STRICT_PROTOTYPES = YES;
678+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
679+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
680+
CLANG_WARN_UNREACHABLE_CODE = YES;
681+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
682+
COPY_PHASE_STRIP = NO;
683+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
684+
ENABLE_NS_ASSERTIONS = NO;
685+
ENABLE_STRICT_OBJC_MSGSEND = YES;
686+
GCC_C_LANGUAGE_STANDARD = gnu11;
687+
GCC_NO_COMMON_BLOCKS = YES;
688+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
689+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
690+
GCC_WARN_UNDECLARED_SELECTOR = YES;
691+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
692+
GCC_WARN_UNUSED_FUNCTION = YES;
693+
GCC_WARN_UNUSED_VARIABLE = YES;
694+
MACOSX_DEPLOYMENT_TARGET = 10.15;
695+
MTL_ENABLE_DEBUG_INFO = NO;
696+
MTL_FAST_MATH = YES;
697+
SDKROOT = macosx;
698+
SWIFT_COMPILATION_MODE = wholemodule;
699+
SWIFT_OPTIMIZATION_LEVEL = "-O";
700+
};
701+
name = "Release-Private";
702+
};
703+
F40B65432C7E0DCB0079F743 /* Release-Private */ = {
704+
isa = XCBuildConfiguration;
705+
buildSettings = {
706+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
707+
CLANG_ENABLE_MODULES = YES;
708+
CODE_SIGN_ENTITLEMENTS = PiHoleStats/PiHoleStats.entitlements;
709+
CODE_SIGN_IDENTITY = "Apple Development";
710+
CODE_SIGN_STYLE = Automatic;
711+
COMBINE_HIDPI_IMAGES = YES;
712+
CURRENT_PROJECT_VERSION = 19;
713+
DEVELOPMENT_ASSET_PATHS = "\"PiHoleStats/Preview Content\"";
714+
ENABLE_HARDENED_RUNTIME = YES;
715+
ENABLE_PREVIEWS = YES;
716+
INFOPLIST_FILE = PiHoleStats/Info.plist;
717+
LD_RUNPATH_SEARCH_PATHS = (
718+
"$(inherited)",
719+
"@executable_path/../Frameworks",
720+
);
721+
MACOSX_DEPLOYMENT_TARGET = 10.15;
722+
MARKETING_VERSION = 2.3.5;
723+
PRODUCT_BUNDLE_IDENTIFIER = dev.bunn.holestats;
724+
PRODUCT_NAME = "Pi Stats";
725+
PROVISIONING_PROFILE_SPECIFIER = "";
726+
SWIFT_OBJC_BRIDGING_HEADER = "PiHoleStats/Util/PiHoleStats-Bridging-Header.h";
727+
SWIFT_VERSION = 5.0;
728+
};
729+
name = "Release-Private";
730+
};
545731
/* End XCBuildConfiguration section */
546732

547733
/* Begin XCConfigurationList section */
548734
319084B32454920700D47980 /* Build configuration list for PBXProject "PiHoleStats" */ = {
549735
isa = XCConfigurationList;
550736
buildConfigurations = (
551737
319084C92454920900D47980 /* Debug */,
738+
F40B65402C7E0DC60079F743 /* Debug-Private */,
552739
319084CA2454920900D47980 /* Release */,
740+
F40B65422C7E0DCB0079F743 /* Release-Private */,
553741
);
554742
defaultConfigurationIsVisible = 0;
555743
defaultConfigurationName = Release;
@@ -558,7 +746,9 @@
558746
isa = XCConfigurationList;
559747
buildConfigurations = (
560748
319084CC2454920900D47980 /* Debug */,
749+
F40B65412C7E0DC60079F743 /* Debug-Private */,
561750
319084CD2454920900D47980 /* Release */,
751+
F40B65432C7E0DCB0079F743 /* Release-Private */,
562752
);
563753
defaultConfigurationIsVisible = 0;
564754
defaultConfigurationName = Release;

‎PiHoleStats/Config/Main.xcconfig

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// If you see this error: "could not find included file 'TeamID.xcconfig' in search paths"
2+
// Make sure you have run the bootstrap script from the project's root directory to set up signing for your team ID.
3+
// You may need to close and re-open the project after doing so.
4+
#include "TeamID.xcconfig"
5+
6+
CODE_SIGN_STYLE = Automatic
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include "Main.xcconfig"
2+
3+
// Once you set your project's development team,
4+
// you'll have a unique bundle identifier. This is because the bundle identifier
5+
// is derived based on the 'SAMPLE_CODE_DISAMBIGUATOR' value.
6+
SAMPLE_CODE_DISAMBIGUATOR=${DEVELOPMENT_TEAM}

‎bootstrap.sh

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/bin/bash
2+
3+
TEAM_ID_FILE=PiHoleStats/Config/TeamID.xcconfig
4+
5+
function print_team_ids() {
6+
echo ""
7+
echo "FYI, here are the team IDs found in your Xcode preferences:"
8+
echo ""
9+
10+
XCODEPREFS="$HOME/Library/Preferences/com.apple.dt.Xcode.plist"
11+
TEAM_KEYS=(`/usr/libexec/PlistBuddy -c "Print :IDEProvisioningTeams" "$XCODEPREFS" | perl -lne 'print $1 if /^ (\S*) =/'`)
12+
13+
for KEY in $TEAM_KEYS
14+
do
15+
i=0
16+
while true ; do
17+
NAME=$(/usr/libexec/PlistBuddy -c "Print :IDEProvisioningTeams:$KEY:$i:teamName" "$XCODEPREFS" 2>/dev/null)
18+
TEAMID=$(/usr/libexec/PlistBuddy -c "Print :IDEProvisioningTeams:$KEY:$i:teamID" "$XCODEPREFS" 2>/dev/null)
19+
20+
if [ $? -ne 0 ]; then
21+
break
22+
fi
23+
24+
echo "$TEAMID - $NAME"
25+
26+
i=$(($i + 1))
27+
done
28+
done
29+
}
30+
31+
if [ -z "$1" ]; then
32+
print_team_ids
33+
echo ""
34+
echo "> What is your Apple Developer Team ID? (looks like 1A23BDCD)"
35+
read TEAM_ID
36+
else
37+
TEAM_ID=$1
38+
fi
39+
40+
if [ -z "$TEAM_ID" ]; then
41+
echo "You must enter a team id"
42+
print_team_ids
43+
exit 1
44+
fi
45+
46+
echo "Setting team ID to $TEAM_ID"
47+
48+
echo "// This file was automatically generated, do not edit directly." > $TEAM_ID_FILE
49+
echo "" >> $TEAM_ID_FILE
50+
echo "DEVELOPMENT_TEAM=$TEAM_ID" >> $TEAM_ID_FILE
51+
52+
echo ""
53+
echo "Successfully generated configuration at $TEAM_ID_FILE, you may now build the app using the \"PiStats\" target"
54+
echo "You may need to close and re-open the project in Xcode if it's already open"
55+
echo ""

0 commit comments

Comments
 (0)
Please sign in to comment.