OSDN Git Service

All 3 Demo projects using iOS updated.
authorChristoph Aschwanden <contact@noblemaster.com>
Thu, 27 Sep 2012 13:04:25 +0000 (22:04 +0900)
committerChristoph Aschwanden <contact@noblemaster.com>
Thu, 27 Sep 2012 13:04:25 +0000 (22:04 +0900)
NOTE: Cannot get vector pinball to work. I get the following error. Not sure how to fix!?
  "Warning: The referenced library 'gdx-backend-ios.dll' is not used from any code, skipping extraction of content resources. (gdx-vectorpinball-ios)"

12 files changed:
demos/invaders/gdx-invaders-ios/gdx-invaders-ios.userprefs
demos/invaders/gdx-invaders-ios/gdx-invaders-ios/Info.plist
demos/invaders/gdx-invaders-ios/gdx-invaders-ios/gdx-invaders-ios.csproj
demos/invaders/gdx-invaders-ios/gdx-invaders-ios/libgdx.a
demos/superjumper/superjumper-ios/superjumper-ios.userprefs
demos/superjumper/superjumper-ios/superjumper-ios/Info.plist
demos/superjumper/superjumper-ios/superjumper-ios/libgdx.a
demos/superjumper/superjumper-ios/superjumper-ios/superjumper-ios.csproj
demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios.userprefs
demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios/Info.plist
demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios/gdx-vectorpinball-ios.csproj
demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios/libgdx.a

index e7a6079..9b9d8a9 100644 (file)
@@ -1,6 +1,6 @@
 <Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release|iPhoneSimulator" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="gdx-invaders-ios/Main.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="gdx-invaders-ios/Info.plist">
     <Files>
       <File FileName="gdx-invaders-ios/Main.cs" Line="8" Column="20" />
       <File FileName="gdx-invaders-ios/Info.plist" />
index dc087e3..bbea134 100644 (file)
@@ -2,6 +2,8 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+       <key>CFBundleDisplayName</key>
+       <string>Invaders</string>
        <key>MinimumOSVersion</key>
        <string>3.2</string>
        <key>UIDeviceFamily</key>
        <true/>
        <key>UISupportedInterfaceOrientations</key>
        <array>
+               <string>UIInterfaceOrientationLandscapeLeft</string>
                <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <array>
+               <string>UIInterfaceOrientationLandscapeLeft</string>
                <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
 </dict>
index 83e0525..2084f0c 100644 (file)
@@ -8,7 +8,7 @@
     <ProjectGuid>{E9434FE8-789E-4EF9-AD1E-40F73DBA497B}</ProjectGuid>
     <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <OutputType>Exe</OutputType>
-    <RootNamespace>superjumperios</RootNamespace>
+    <RootNamespace>invaders</RootNamespace>
     <AssemblyName>superjumperios</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
   <ItemGroup>
     <Content Include="..\..\gdx-invaders-android\assets\data\droid.png">
       <Link>data\droid.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\explode.png">
       <Link>data\explode.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\font10.png">
       <Link>data\font10.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\font16.png">
       <Link>data\font16.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\invader.png">
       <Link>data\invader.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\knight.jpg">
       <Link>data\knight.jpg</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\planet.jpg">
       <Link>data\planet.jpg</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\ship.png">
       <Link>data\ship.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\title.png">
       <Link>data\title.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\8.12.mp3">
       <Link>data\8.12.mp3</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\block.obj">
       <Link>data\block.obj</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\block.wings">
       <Link>data\block.wings</Link>
-    </Content>
-    <Content Include="..\..\gdx-invaders-android\assets\data\explosion.ogg">
-      <Link>data\explosion.ogg</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\font.ttf">
       <Link>data\font.ttf</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\font10.fnt">
       <Link>data\font10.fnt</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\font16.fnt">
       <Link>data\font16.fnt</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\invader.obj">
       <Link>data\invader.obj</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\invader.wings">
       <Link>data\invader.wings</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\knight.md2">
       <Link>data\knight.md2</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\playfield.wings">
       <Link>data\playfield.wings</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\ship.obj">
       <Link>data\ship.obj</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\ship.wings">
       <Link>data\ship.wings</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shot.obj">
       <Link>data\shot.obj</Link>
-    </Content>
-    <Content Include="..\..\gdx-invaders-android\assets\data\shot.ogg">
-      <Link>data\shot.ogg</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shot.wings">
       <Link>data\shot.wings</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\color-fs.glsl">
       <Link>data\shaders\color-fs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\color-vs.glsl">
       <Link>data\shaders\color-vs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\light-tex-fs.glsl">
       <Link>data\shaders\light-tex-fs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\light-tex-vs.glsl">
       <Link>data\shaders\light-tex-vs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\tex-fs.glsl">
       <Link>data\shaders\tex-fs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\gdx-invaders-android\assets\data\shaders\tex-vs.glsl">
       <Link>data\shaders\tex-vs.glsl</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\gdx-invaders-android\assets\data\explosion.wav">
+      <Link>data\explosion.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\gdx-invaders-android\assets\data\shot.wav">
+      <Link>data\shot.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
 </Project>
\ No newline at end of file
index 7546d1c..be1a49d 100644 (file)
Binary files a/demos/invaders/gdx-invaders-ios/gdx-invaders-ios/libgdx.a and b/demos/invaders/gdx-invaders-ios/gdx-invaders-ios/libgdx.a differ
index 481ed5b..820f4ba 100644 (file)
@@ -1,8 +1,9 @@
 <Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release|iPhoneSimulator" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="superjumper-ios/Main.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="superjumper-ios/Info.plist">
     <Files>
       <File FileName="superjumper-ios/Main.cs" Line="8" Column="11" />
+      <File FileName="superjumper-ios/Info.plist" />
     </Files>
   </MonoDevelop.Ide.Workbench>
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
index c13da4b..ec0ab3e 100644 (file)
@@ -2,6 +2,8 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+       <key>CFBundleDisplayName</key>
+       <string>superjumper</string>
        <key>MinimumOSVersion</key>
        <string>3.2</string>
        <key>UIDeviceFamily</key>
        <key>UISupportedInterfaceOrientations</key>
        <array>
                <string>UIInterfaceOrientationPortrait</string>
+               <string>UIInterfaceOrientationPortraitUpsideDown</string>
        </array>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <array>
                <string>UIInterfaceOrientationPortrait</string>
+               <string>UIInterfaceOrientationPortraitUpsideDown</string>
        </array>
 </dict>
 </plist>
index 7546d1c..be1a49d 100644 (file)
Binary files a/demos/superjumper/superjumper-ios/superjumper-ios/libgdx.a and b/demos/superjumper/superjumper-ios/superjumper-ios/libgdx.a differ
index 920121a..52fd0a5 100644 (file)
   <ItemGroup>
     <Content Include="..\..\superjumper-android\assets\data\background.png">
       <Link>data\background.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\font.png">
       <Link>data\font.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help.png">
       <Link>data\help.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help1.png">
       <Link>data\help1.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help2.png">
       <Link>data\help2.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help3.png">
       <Link>data\help3.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help4.png">
       <Link>data\help4.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\help5.png">
       <Link>data\help5.png</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\items.png">
       <Link>data\items.png</Link>
-    </Content>
-    <Content Include="..\..\superjumper-android\assets\data\click.ogg">
-      <Link>data\click.ogg</Link>
-    </Content>
-    <Content Include="..\..\superjumper-android\assets\data\coin.ogg">
-      <Link>data\coin.ogg</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="..\..\superjumper-android\assets\data\font.fnt">
       <Link>data\font.fnt</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\superjumper-android\assets\data\music.mp3">
+      <Link>data\music.mp3</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="..\..\superjumper-android\assets\data\highjump.ogg">
-      <Link>data\highjump.ogg</Link>
+    <Content Include="..\..\superjumper-android\assets\data\click.wav">
+      <Link>data\click.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="..\..\superjumper-android\assets\data\hit.ogg">
-      <Link>data\hit.ogg</Link>
+    <Content Include="..\..\superjumper-android\assets\data\coin.wav">
+      <Link>data\coin.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="..\..\superjumper-android\assets\data\jump.ogg">
-      <Link>data\jump.ogg</Link>
+    <Content Include="..\..\superjumper-android\assets\data\highjump.wav">
+      <Link>data\highjump.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="..\..\superjumper-android\assets\data\music.mp3">
-      <Link>data\music.mp3</Link>
+    <Content Include="..\..\superjumper-android\assets\data\hit.wav">
+      <Link>data\hit.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\superjumper-android\assets\data\jump.wav">
+      <Link>data\jump.wav</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
 </Project>
\ No newline at end of file
index 8a248c3..dede5b8 100644 (file)
@@ -3,7 +3,6 @@
   <MonoDevelop.Ide.Workbench ActiveDocument="gdx-vectorpinball-ios/Main.cs">
     <Files>
       <File FileName="gdx-vectorpinball-ios/Main.cs" Line="8" Column="11" />
-      <File FileName="gdx-vectorpinball-ios/Info.plist" />
     </Files>
   </MonoDevelop.Ide.Workbench>
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
index a93691d..53c0eb4 100644 (file)
@@ -2,6 +2,8 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+       <key>CFBundleDisplayName</key>
+       <string>vectorpinpall</string>
        <key>MinimumOSVersion</key>
        <string>3.2</string>
        <key>UIDeviceFamily</key>
        <key>UISupportedInterfaceOrientations</key>
        <array>
                <string>UIInterfaceOrientationPortrait</string>
-               <string>UIInterfaceOrientationLandscapeLeft</string>
-               <string>UIInterfaceOrientationLandscapeRight</string>
+               <string>UIInterfaceOrientationPortraitUpsideDown</string>
        </array>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <array>
                <string>UIInterfaceOrientationPortrait</string>
                <string>UIInterfaceOrientationPortraitUpsideDown</string>
-               <string>UIInterfaceOrientationLandscapeLeft</string>
-               <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
 </dict>
 </plist>
index 74090fc..0fa80fe 100644 (file)
@@ -8,8 +8,7 @@
     <ProjectGuid>{E9434FE8-789E-4EF9-AD1E-40F73DBA497B}</ProjectGuid>
     <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <OutputType>Exe</OutputType>
-    <RootNamespace>superjumperios</RootNamespace>
-    <AssemblyName>superjumperios</AssemblyName>
+    <RootNamespace>vectorpinball</RootNamespace>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
     <DebugSymbols>True</DebugSymbols>
@@ -30,6 +29,7 @@
         <Command type="BeforeBuild" command="ant -f convert.xml compile convert -DSRC=&quot;../../gdx-vectorpinball/src/&quot; -DCLASSPATH=&quot;../../../../gdx/bin/;../../../../backends/gdx-backend-lwjgl/bin&quot; -DIN=&quot;-r:../../../../backends/gdx-backend-iosmonotouch/libs/gdx.dll -recurse:target/*.class&quot;  -DOUT=&quot;vectorpinball.dll&quot; -DEXCLUDE=&quot;**/BouncyDesktop.java&quot; -v" workingdir="${ProjectDir}" />
       </CustomCommands>
     </CustomCommands>
+    <AssemblyName>vectorpinball</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
     <DebugType>none</DebugType>
@@ -48,6 +48,7 @@
         <Command type="BeforeBuild" command="ant -f convert.xml compile convert -DSRC=&quot;../../gdx-vectorpinball/src/&quot; -DCLASSPATH=&quot;../../../../gdx/bin/;../../../../backends/gdx-backend-lwjgl/bin&quot; -DIN=&quot;-r:../../../../backends/gdx-backend-iosmonotouch/libs/gdx.dll -recurse:target/*.class&quot;  -DOUT=&quot;vectorpinball.dll&quot; -DEXCLUDE=&quot;**/BouncyDesktop.java&quot; -v" workingdir="${ProjectDir}" />
       </CustomCommands>
     </CustomCommands>
+    <AssemblyName>vectorpinball</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
     <DebugSymbols>True</DebugSymbols>
@@ -62,6 +63,7 @@
     <MtouchDebug>True</MtouchDebug>
     <MtouchProfiling>True</MtouchProfiling>
     <MtouchI18n>west</MtouchI18n>
+    <AssemblyName>superjumperios</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
     <DebugType>none</DebugType>
@@ -75,6 +77,7 @@
     <IpaPackageName />
     <MtouchI18n>west</MtouchI18n>
     <MtouchExtraArgs>-nosymbolstrip -nostrip -cxx -gcc_flags "-L${ProjectDir} -likvm-natives -lgdx -force_load ${ProjectDir}/libgdx.a -force_load ${ProjectDir}/libikvm-natives.a"</MtouchExtraArgs>
+    <AssemblyName>superjumperios</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' ">
     <DebugType>none</DebugType>
@@ -86,6 +89,7 @@
     <BuildIpa>True</BuildIpa>
     <CodesignKey>iPhone Distribution</CodesignKey>
     <MtouchI18n />
+    <AssemblyName>superjumperios</AssemblyName>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' ">
     <DebugType>none</DebugType>
@@ -95,6 +99,7 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>False</ConsolePause>
     <CodesignKey>iPhone Distribution</CodesignKey>
+    <AssemblyName>superjumperios</AssemblyName>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
   <ItemGroup>
     <Content Include="..\..\gdx-vectorpinball-android\assets\data\field_layout.json">
       <Link>data\field_layout.json</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
 </Project>
\ No newline at end of file
index 7546d1c..be1a49d 100644 (file)
Binary files a/demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios/libgdx.a and b/demos/vector-pinball/gdx-vectorpinball-ios/gdx-vectorpinball-ios/libgdx.a differ