[ffigen] Test on mac, to cover objective C (#289)

diff --git a/pkgs/ffigen/.github/workflows/test-package.yml b/pkgs/ffigen/.github/workflows/test-package.yml
index 8da431d..67a6c95 100644
--- a/pkgs/ffigen/.github/workflows/test-package.yml
+++ b/pkgs/ffigen/.github/workflows/test-package.yml
@@ -59,3 +59,25 @@
         with:
           github-token: ${{ secrets.GITHUB_TOKEN }}
           path-to-lcov: lcov.info
+
+  mac-test:
+    needs: analyze
+    runs-on: macos-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: stable
+      - name: Install dependencies
+        run: dart pub get
+      - name: Build test dylib
+        run: cd test/native_test && dart build_test_dylib.dart && cd ../..
+      - name: Run VM tests
+        run: dart test --platform vm
+      - name: Collect coverage
+        run: ./tool/coverage.sh
+      - name: Upload coverage
+        uses: coverallsapp/github-action@v1.1.2
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          path-to-lcov: lcov.info
diff --git a/pkgs/ffigen/lib/src/header_parser/includer.dart b/pkgs/ffigen/lib/src/header_parser/includer.dart
index 0b3505b..4f3bbbf 100644
--- a/pkgs/ffigen/lib/src/header_parser/includer.dart
+++ b/pkgs/ffigen/lib/src/header_parser/includer.dart
@@ -70,7 +70,8 @@
 
   // Objective C has some extra system headers that have a non-empty sourceFile.
   if (config.language == Language.objc &&
-      sourceFile.startsWith(strings.clangDefaultObjCSystemHeaderPath)) {
+      strings.objCInternalDirectories
+          .any((path) => sourceFile.startsWith(path))) {
     return false;
   }
 
diff --git a/pkgs/ffigen/lib/src/strings.dart b/pkgs/ffigen/lib/src/strings.dart
index 2e57de7..2140572 100644
--- a/pkgs/ffigen/lib/src/strings.dart
+++ b/pkgs/ffigen/lib/src/strings.dart
@@ -42,6 +42,14 @@
     '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include';
 const clangDefaultObjCSystemHeaders = ['objc/NSObject.h'];
 
+// Internal objective C directories that are automatically pulled in by clang,
+// and should be excluded from output (unless explicitly used).
+const objCInternalDirectories = [
+  clangDefaultObjCSystemHeaderPath,
+  '/Applications/Xcode.app/Contents/Developer',
+  '/usr/local/opt/llvm/lib',
+];
+
 const headers = 'headers';
 
 // Sub-fields of headers
diff --git a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart
index 5cd8096..8fe008b 100644
--- a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart
+++ b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart
@@ -24,7 +24,3 @@
 class ObjCObject extends ffi.Opaque {}
 
 class ObjCSel extends ffi.Opaque {}
-
-const int true1 = 1;
-
-const int false1 = 0;